MySQL8.0使用performance_schema分析一條SQL的具體執行時間

MySQL8.0使用performance_schema分析一條SQL的具體執行時間

新版的MySQL已經徹底移除了以前ProFile的大多數功能

第一步

SELECT *
FROM performance_schema.setup_actors;

這是用於配置是否爲新的前臺server線程(與客戶端連接相關聯的線程)啓用監視和歷史事件日誌記錄的表
用於配置是否爲新的前臺server線程(與客戶端連接相關聯的線程)啓用監視和歷史事件日誌記錄

第二步

UPDATE performance_schema.setup_actors
SET ENABLED = 'NO',
    HISTORY = 'NO'
WHERE HOST = '%'
  AND USER = '%';

關閉HOST爲%並且USER爲%的記錄功能(這個功能在MySQL重啓後會自動還原)
這個時候我們在查看第一步的SQL檢查是否關閉
啓用記錄功能

第三步

INSERT INTO performance_schema.setup_actors
    (HOST, USER, ROLE, ENABLED, HISTORY)
VALUES ('localhost', 'test_user', '%', 'YES', 'YES');

我們自己往setup_actors 表中插入一個自定義用戶用於記錄,HOST指定爲localhost,USER指定爲test_user,並且開啓日誌監控和記錄
此時我們再去查看第一步SQL驗證是否插入成功
驗證用戶插入成功沒

第四步

UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%statement/%';
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME LIKE '%stage/%';
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%events_statements_%';
sql
UPDATE performance_schema.setup_consumers
SET ENABLED = 'YES'
WHERE NAME LIKE '%events_stages_%';

設置系統記錄哪些事件,在setup_instruments表中可以看到所有的事件支持,在setup_consumers表中可以看到一些我也不知道是什麼的數據,反正就是一些監控的配置,YES代表啓用,NO代表不啓用

第五步

select *
from emp
where emane = 'FJIkdL';

執行需要檢測事件的SQL語句

第六步

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
FROM performance_schema.events_statements_history_long;

查詢所有的日誌記錄類似於以前的show profiles;每一個記錄都會帶一個id
所有日誌記錄

第七步

SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT / 1000000000000, 6) AS Duration
FROM performance_schema.events_stages_history_long
WHERE NESTING_EVENT_ID = 327;

根據上面的EVENT_ID查詢每一個事件的詳細執行時間
詳細時間

參考資料

羅小波·沃趣科技高級數據庫技術專家-《performance_schema全方位介紹》
MySQL8.0官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章