1. 程式人生 > 實用技巧 >[mysql]查詢擷取分析-Show Profile

[mysql]查詢擷取分析-Show Profile

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:死鎖。