[mysql]查詢擷取分析-Show Profile
阿新 • • 發佈:2020-09-20
Show Profile
是什麼
MySQL提供可以用來分析當前會話中語句執行的資源消耗情況。可以用於SQL的調優的測量.
預設情況下,引數處於關閉狀態,並儲存最近15次的執行結果
分析步驟
1是否支援,檢視當前mysql版本是否支援
mysql> show variables like 'profiling%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | profiling | OFF | | profiling_history_size | 15 | +------------------------+-------+ 2 rows in set (0.00 sec)
2開啟功能
mysql> set profiling = on;
Query OK, 0 rows affected, 1 warning (0.00 sec)
3執行sql
SELECT * FROM `emp` GROUP BY `id`%10 LIMIT 150000;
SELECT * FROM `emp` GROUP BY `id`%20 ORDER BY 5;
4檢視結果,show profile
mysql> show profiles; +----------+------------+---------------------------------------------------+ | Query_ID | Duration | Query | +----------+------------+---------------------------------------------------+ | 1 | 0.47962675 | SELECT * FROM `emp` GROUP BY `id`%10 LIMIT 150000 | | 2 | 0.50838825 | SELECT * FROM `emp` GROUP BY `id`%20 ORDER BY 5 | | 3 | 0.49408000 | SELECT * FROM `emp` GROUP BY `id`%20 ORDER BY 5 | | 4 | 0.52304925 | SELECT * FROM `emp` GROUP BY `id`%20 ORDER BY 5 | +----------+------------+---------------------------------------------------+ 4 rows in set, 1 warning (0.00 sec)
5診斷SQL
mysql> SHOW PROFILE cpu,block io FOR QUERY 4; +----------------------+----------+----------+------------+--------------+---------------+ | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | +----------------------+----------+----------+------------+--------------+---------------+ | starting | 0.000095 | 0.000000 | 0.000000 | 0 | 0 | | checking permissions | 0.000007 | 0.000000 | 0.000000 | 0 | 0 | | Opening tables | 0.000022 | 0.000000 | 0.000000 | 0 | 0 | | init | 0.000029 | 0.000000 | 0.000000 | 0 | 0 | | System lock | 0.000016 | 0.000000 | 0.000000 | 0 | 0 | | optimizing | 0.000009 | 0.000000 | 0.000000 | 0 | 0 | | statistics | 0.000019 | 0.000000 | 0.000000 | 0 | 0 | | preparing | 0.000010 | 0.000000 | 0.000000 | 0 | 0 | | Creating tmp table | 0.000035 | 0.000000 | 0.000000 | 0 | 0 | | Sorting result | 0.000003 | 0.000000 | 0.000000 | 0 | 0 | | executing | 0.000002 | 0.000000 | 0.000000 | 0 | 0 | | Sending data | 0.522402 | 0.520000 | 0.000000 | 0 | 0 | | Creating sort index | 0.000068 | 0.000000 | 0.000000 | 0 | 0 | | end | 0.000005 | 0.000000 | 0.000000 | 0 | 0 | | query end | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | | removing tmp table | 0.000007 | 0.000000 | 0.000000 | 0 | 0 | | query end | 0.000003 | 0.000000 | 0.000000 | 0 | 0 | | closing tables | 0.000008 | 0.000000 | 0.000000 | 0 | 0 | | freeing items | 0.000290 | 0.000000 | 0.000000 | 0 | 0 | | cleaning up | 0.000014 | 0.000000 | 0.000000 | 0 | 0 | +----------------------+----------+----------+------------+--------------+---------------+ 20 rows in set, 1 warning (0.00 sec)
show profile查詢引數備註:
ALL
:顯示所有的開銷資訊。
BLOCK IO:顯示塊IO相關開銷
CONTEXT SWITCHES:上下文切換相關開銷。
CPU:顯示CPU相關開銷資訊
IPC:顯示傳送和接收相關開銷資訊。
MEMORY:顯示記憶體相關開銷資訊。
PAGE FAULTS:顯示頁面錯誤相關開銷資訊。
SOURCE:顯示和Source_function,Source_file,Source_line相關資訊
SWAPS`:顯示交換次數相關開銷的資訊。
6日常開發需要注意的結論(不要出現下面的情況)
converting HEAP to MyISAM
:查詢結果太大,記憶體都不夠用了,往磁碟上搬了。Creating tmp table
:建立臨時表:- 拷貝資料到臨時表
- 用完再刪除
Copying to tmp table on disk
:把記憶體中的臨時表複製到磁碟,危險!!!locked
:死鎖。