文件首頁
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 參考手冊  /  ...  /  使用效能結構描述進行查詢分析

29.19.1 使用效能結構描述進行查詢分析

以下範例示範如何使用效能結構描述陳述式事件和階段事件來擷取與 SHOW PROFILESSHOW PROFILE 陳述式提供的分析資訊相當的資料。

setup_actors 表格可用於限制依主機、使用者或帳戶收集歷史事件,以減少執行階段額外負荷和在歷史表格中收集的資料量。此範例的第一個步驟顯示如何將歷史事件的收集限制為特定使用者。

效能結構描述以微微秒(一秒的兆分之一)顯示事件計時器資訊,以將計時資料正規化為標準單位。在以下範例中,TIMER_WAIT 值除以 1000000000000 以秒為單位顯示資料。值也會截斷至小數點後 6 位,以與 SHOW PROFILESSHOW PROFILE 陳述式相同的格式顯示資料。

  1. 將歷史事件的收集限制為執行查詢的使用者。依預設,setup_actors 設定為允許監控和收集所有前景執行緒的歷史事件

    mysql> SELECT * FROM performance_schema.setup_actors;
    +------+------+------+---------+---------+
    | HOST | USER | ROLE | ENABLED | HISTORY |
    +------+------+------+---------+---------+
    | %    | %    | %    | YES     | YES     |
    +------+------+------+---------+---------+

    更新 setup_actors 表格中的預設列,以停用所有前景執行緒的歷史事件收集和監控,並插入新列,以啟用執行查詢之使用者的監控和歷史事件收集

    mysql> UPDATE performance_schema.setup_actors
           SET ENABLED = 'NO', HISTORY = 'NO'
           WHERE HOST = '%' AND USER = '%';
    
    mysql> INSERT INTO performance_schema.setup_actors
           (HOST,USER,ROLE,ENABLED,HISTORY)
           VALUES('localhost','test_user','%','YES','YES');

    setup_actors 表格中的資料現在應與以下內容類似

    mysql> SELECT * FROM performance_schema.setup_actors;
    +-----------+-----------+------+---------+---------+
    | HOST      | USER      | ROLE | ENABLED | HISTORY |
    +-----------+-----------+------+---------+---------+
    | %         | %         | %    | NO      | NO      |
    | localhost | test_user | %    | YES     | YES     |
    +-----------+-----------+------+---------+---------+
  2. 透過更新 setup_instruments 表格來確保已啟用陳述式和階段工具。依預設,某些工具可能已啟用。

    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%statement/%';
    
    mysql> UPDATE performance_schema.setup_instruments
           SET ENABLED = 'YES', TIMED = 'YES'
           WHERE NAME LIKE '%stage/%';
  3. 確保已啟用 events_statements_*events_stages_* 消費者。依預設,某些消費者可能已啟用。

    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_statements_%';
    
    mysql> UPDATE performance_schema.setup_consumers
           SET ENABLED = 'YES'
           WHERE NAME LIKE '%events_stages_%';
  4. 在您正在監控的使用者帳戶下,執行您想要分析的陳述式。例如

    mysql> SELECT * FROM employees.employees WHERE emp_no = 10001;
    +--------+------------+------------+-----------+--------+------------+
    | emp_no | birth_date | first_name | last_name | gender | hire_date |
    +--------+------------+------------+-----------+--------+------------+
    |  10001 | 1953-09-02 | Georgi     | Facello   | M      | 1986-06-26 |
    +--------+------------+------------+-----------+--------+------------+
  5. 透過查詢 events_statements_history_long 表格來識別陳述式的 EVENT_ID。此步驟與執行 SHOW PROFILES 來識別 Query_ID 類似。以下查詢產生類似 SHOW PROFILES 的輸出

    mysql> SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
           FROM performance_schema.events_statements_history_long WHERE SQL_TEXT like '%10001%';
    +----------+----------+--------------------------------------------------------+
    | event_id | duration | sql_text                                               |
    +----------+----------+--------------------------------------------------------+
    |       31 | 0.028310 | SELECT * FROM employees.employees WHERE emp_no = 10001 |
    +----------+----------+--------------------------------------------------------+
  6. 查詢 events_stages_history_long 表格以擷取陳述式的階段事件。階段是使用事件巢狀結構連結到陳述式的。每個階段事件記錄都有一個 NESTING_EVENT_ID 欄位,其中包含父陳述式的 EVENT_ID

    mysql> SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
           FROM performance_schema.events_stages_history_long WHERE NESTING_EVENT_ID=31;
    +--------------------------------+----------+
    | Stage                          | Duration |
    +--------------------------------+----------+
    | stage/sql/starting             | 0.000080 |
    | stage/sql/checking permissions | 0.000005 |
    | stage/sql/Opening tables       | 0.027759 |
    | stage/sql/init                 | 0.000052 |
    | stage/sql/System lock          | 0.000009 |
    | stage/sql/optimizing           | 0.000006 |
    | stage/sql/statistics           | 0.000082 |
    | stage/sql/preparing            | 0.000008 |
    | stage/sql/executing            | 0.000000 |
    | stage/sql/Sending data         | 0.000017 |
    | stage/sql/end                  | 0.000001 |
    | stage/sql/query end            | 0.000004 |
    | stage/sql/closing tables       | 0.000006 |
    | stage/sql/freeing items        | 0.000272 |
    | stage/sql/cleaning up          | 0.000001 |
    +--------------------------------+----------+