文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  SHOW PROFILE 語法

15.7.7.31 SHOW PROFILE 語法

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
}

SHOW PROFILESHOW PROFILES 語法會顯示分析資訊,指出目前工作階段期間執行之語法的資源使用狀況。

注意

SHOW PROFILESHOW PROFILES 語法已過時;預計會在未來的 MySQL 版本中移除。請改用 效能綱要;請參閱第 29.19.1 節,「使用效能綱要進行查詢分析」

若要控制分析,請使用 profiling 工作階段變數,其預設值為 0 (OFF)。將 profiling 設定為 1 或 ON 即可啟用分析。

mysql> SET profiling = 1;

SHOW PROFILES 會顯示傳送至伺服器的最新語法清單。清單大小由 profiling_history_size 工作階段變數控制,其預設值為 15。最大值為 100。將值設定為 0 實際上會停用分析。

除了 SHOW PROFILESHOW PROFILES 之外,所有語法都會進行分析,因此這兩個語法都不會出現在分析清單中。格式錯誤的語法也會進行分析。例如,SHOW PROFILING 是不合法的語法,如果您嘗試執行它,就會發生語法錯誤,但它會出現在分析清單中。

SHOW PROFILE 會顯示單一語法的詳細資訊。若沒有 FOR QUERY n 子句,輸出會與最近執行的語法相關。如果包含 FOR QUERY nSHOW PROFILE 會顯示語法 n 的資訊。n 的值對應於 SHOW PROFILES 顯示的 Query_ID 值。

可以給定 LIMIT row_count 子句,以將輸出限制為 row_count 列。如果給定 LIMIT,可以新增 OFFSET offset,以便從完整列集合中的 offset 列開始輸出。

預設情況下,SHOW PROFILE 會顯示 StatusDuration 資料行。Status 值類似於 SHOW PROCESSLIST 顯示的 State 值,儘管對於某些狀態值,兩個語法在解讀上可能有一些細微的差異 (請參閱第 10.14 節,「檢查伺服器執行緒 (處理序) 資訊」)。

可以指定選用的 type 值,以顯示特定其他類型的資訊

  • ALL 會顯示所有資訊

  • BLOCK IO 會顯示區塊輸入和輸出作業的計數

  • CONTEXT SWITCHES 會顯示自願和非自願內容切換的計數

  • CPU 會顯示使用者和系統 CPU 使用時間

  • IPC 會顯示已傳送和已接收訊息的計數

  • MEMORY 目前尚未實作

  • PAGE FAULTS 會顯示主要和次要頁面錯誤的計數

  • SOURCE 會顯示來源碼中函數的名稱,以及函數所在檔案的名稱和行號

  • SWAPS 會顯示交換計數

分析是針對每個工作階段啟用。當工作階段結束時,其分析資訊會遺失。

mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
|           0 |
+-------------+
1 row in set (0.00 sec)

mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> DROP TABLE IF EXISTS t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE T1 (id INT);
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW PROFILES;
+----------+----------+--------------------------+
| Query_ID | Duration | Query                    |
+----------+----------+--------------------------+
|        0 | 0.000088 | SET PROFILING = 1        |
|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |
|        2 | 0.011947 | CREATE TABLE t1 (id INT) |
+----------+----------+--------------------------+
3 rows in set (0.00 sec)

mysql> SHOW PROFILE;
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| checking permissions | 0.000040 |
| creating table       | 0.000056 |
| After create         | 0.011363 |
| query end            | 0.000375 |
| freeing items        | 0.000089 |
| logging slow query   | 0.000019 |
| cleaning up          | 0.000005 |
+----------------------+----------+
7 rows in set (0.00 sec)

mysql> SHOW PROFILE FOR QUERY 1;
+--------------------+----------+
| Status             | Duration |
+--------------------+----------+
| query end          | 0.000107 |
| freeing items      | 0.000008 |
| logging slow query | 0.000015 |
| cleaning up        | 0.000006 |
+--------------------+----------+
4 rows in set (0.00 sec)

mysql> SHOW PROFILE CPU FOR QUERY 2;
+----------------------+----------+----------+------------+
| Status               | Duration | CPU_user | CPU_system |
+----------------------+----------+----------+------------+
| checking permissions | 0.000040 | 0.000038 |   0.000002 |
| creating table       | 0.000056 | 0.000028 |   0.000028 |
| After create         | 0.011363 | 0.000217 |   0.001571 |
| query end            | 0.000375 | 0.000013 |   0.000028 |
| freeing items        | 0.000089 | 0.000010 |   0.000014 |
| logging slow query   | 0.000019 | 0.000009 |   0.000010 |
| cleaning up          | 0.000005 | 0.000003 |   0.000002 |
+----------------------+----------+----------+------------+
7 rows in set (0.00 sec)
注意

分析在某些架構上僅部分功能正常。對於依賴 getrusage() 系統呼叫的值,在不支援該呼叫的系統 (例如 Windows) 上會傳回 NULL。此外,分析是針對每個處理序而非每個執行緒進行。這表示伺服器中您自己以外的執行緒上的活動可能會影響您看到的計時資訊。

也可以從 INFORMATION_SCHEMA PROFILING 資料表取得分析資訊。請參閱第 28.3.24 節,「INFORMATION_SCHEMA PROFILING 資料表」。例如,下列查詢是等效的

SHOW PROFILE FOR QUERY 2;

SELECT STATE, FORMAT(DURATION, 6) AS DURATION
FROM INFORMATION_SCHEMA.PROFILING
WHERE QUERY_ID = 2 ORDER BY SEQ;