摘自:https://www.cnblogs.com/zhuifeng-mayi/p/9270592.html
是什么
mysql官網定義
The SHOW PROFILE and SHOW PROFILES statements display profiling information that indicates resource usage for statements executed during the course of the current session.
profile是性能檢測工具:簡單的說,當前會話資源的消耗情況。
注意:show profile和show Profiles都是不建議使用的,在mysql后期的版本中可能會被刪除;官網建議使用Performance Schema
怎么使用
profile默認關閉,生產環境中也建議關閉。
查看當前環境的profile設置
mysql> show variables like '%profiling%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | have_profiling | YES | | profiling | OFF | | profiling_history_size | 15 | +------------------------+-------+
profiling off表示profile關閉,profiling_history_size 15表示保存最近15條SQL的資源消耗情況。
開啟profile功能,可以使用命令
set global profiling = 1;
然后就可以使用下面命令
show profiles;
查看最近15條SQL的情況;
如果要查看某一條的具體情況,SQL格式為:
SHOW PROFILE [type [, type] ... ] [FOR QUERY n] [LIMIT row_count [OFFSET offset]] type: { ALL | BLOCK IO | CONTEXT SWITCHES | CPU | IPC | MEMORY | PAGE FAULTS | SOURCE | SWAPS }
官網對type中各個字段的解釋為:
ALL displays all information BLOCK IO displays counts for block input and output operations CONTEXT SWITCHES displays counts for voluntary and involuntary context switches CPU displays user and system CPU usage times IPC displays counts for messages sent and received MEMORY is not currently implemented PAGE FAULTS displays counts for major and minor page faults SOURCE displays the names of functions from the source code, together with the name and line number of the file in which the function occurs SWAPS displays swap counts
profiling 對每個會話有效,當會話結束后,當前的profiling信息就會丟失。
使用案例
mysql> show profiles; +----------+------------+----------------------------+ | Query_ID | Duration | Query | +----------+------------+----------------------------+ | 1 | 0.00060275 | select * from customers | | 2 | 0.00222450 | show tables | | 3 | 0.00567425 | select * from offices | | 4 | 0.00052050 | show tables | | 5 | 0.01123300 | select * from payments | | 6 | 0.00111675 | show tables | | 7 | 0.02049625 | select * from productlines | +----------+------------+----------------------------+
在排查SQL執行情況,或者是哪條SQL執行非常慢,慢在哪里;profile都是非常的輔助工具。
顯示一條SQL的具體花銷在哪里
mysql> show profile for query 7; +----------------------+----------+ | Status | Duration | +----------------------+----------+ | starting | 0.000043 | | checking permissions | 0.000005 | | Opening tables | 0.014552 | | init | 0.000025 | | System lock | 0.000009 | | optimizing | 0.000004 | | statistics | 0.000011 | | preparing | 0.000010 | | executing | 0.000003 | | Sending data | 0.005653 | | end | 0.000010 | | query end | 0.000009 | | closing tables | 0.000020 | | freeing items | 0.000121 | | cleaning up | 0.000023 | +----------------------+----------+
信息一目了然,這樣我就能對SQL執行情況有個大概的了解。