performance_schema.events_statements_historyを使って直近に実行されたクエリを見る
さくっと、直近で実行されたクエリの情報がみたいです。
それにはperformance_schema.events_statements_historyテーブルを使います。
performance_schema.events_statements_historyはスレッドごとにperformance_schema_events_statements_history_size(default 10)で指定した個数分のステートメントを格納します。
MySQL5.7以降であればデフォルトONです。
以下のようなSQLを実行すればいい感じみれる。
SELECT * FROM
(
SELECT THREAD_ID,EVENT_ID,
BaseDate - interval (BaseUptime-ROUND(TIMER_START/1000000000000)) second as QUERY_START,
BaseDate - interval (BaseUptime-ROUND(TIMER_END/1000000000000)) second as QUERY_END,
sys.format_time(TIMER_WAIT) ElapsedTime,
substr(SQL_TEXT,1,150) sqltext
FROM performance_schema.events_statements_history,
(
SELECT now() as BaseDate ,
ROUND(TIMER_START/1000000000000) as BaseUptime,
THREAD_ID as BaseThreadID
FROM performance_schema.events_statements_current
WHERE THREAD_ID IN (SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID=connection_id())
) Base
WHERE BaseThreadID != THREAD_ID
) a
ORDER BY THREAD_ID,EVENT_ID;
+-----------+----------+---------------------+---------------------+-------------+----------------------------------+
| THREAD_ID | EVENT_ID | QUERY_START | QUERY_END | ElapsedTime | sqltext |
+-----------+----------+---------------------+---------------------+-------------+----------------------------------+
| 4560 | 1 | 2020-07-03 13:57:15 | 2020-07-03 13:57:15 | 290.46 us | select @@version_comment limit 1 |
| 4560 | 2 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 99.98 us | SELECT DATABASE() |
| 4560 | 3 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 17.21 us | NULL |
| 4560 | 4 | 2020-07-03 13:57:29 | 2020-07-03 13:57:29 | 31.28 us | select now() |
| 4561 | 1 | 2020-07-03 13:57:15 | 2020-07-03 13:57:15 | 663.76 us | select @@version_comment limit 1 |
| 4561 | 2 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 63.55 us | SELECT DATABASE() |
| 4561 | 3 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 48.33 us | NULL |
| 4561 | 4 | 2020-07-03 13:57:29 | 2020-07-03 13:57:29 | 182.38 us | select now() |
| 4562 | 1 | 2020-07-03 13:57:15 | 2020-07-03 13:57:15 | 620.98 us | select @@version_comment limit 1 |
| 4562 | 2 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 31.73 us | SELECT DATABASE() |
| 4562 | 3 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 42.64 us | NULL |
| 4562 | 4 | 2020-07-03 13:57:29 | 2020-07-03 13:57:29 | 119.97 us | select now() |
| 4563 | 1 | 2020-07-03 13:57:15 | 2020-07-03 13:57:15 | 629.58 us | select @@version_comment limit 1 |
| 4563 | 2 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 128.83 us | SELECT DATABASE() |
| 4563 | 3 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 21.02 us | NULL |
| 4563 | 4 | 2020-07-03 13:57:29 | 2020-07-03 13:57:29 | 119.84 us | select now() |
| 4564 | 1 | 2020-07-03 13:57:16 | 2020-07-03 13:57:16 | 799.33 us | select @@version_comment limit 1 |
| 4564 | 2 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 107.73 us | SELECT DATABASE() |
| 4564 | 3 | 2020-07-03 13:57:22 | 2020-07-03 13:57:22 | 28.56 us | NULL |
| 4564 | 4 | 2020-07-03 13:57:29 | 2020-07-03 13:57:29 | 54.92 us | select now() |
+-----------+----------+---------------------+---------------------+-------------+----------------------------------+
SQLが開始された時間と完了した時間はこのテーブルにカラムはないけど、yoku大先生のアドバイスから導出することができました。
俺は「p_sをクエリーするスレッド自身のタイマーと比較して」ってことをやっているようですhttps://t.co/fOnJt3tMtN
— yoku0825 (@yoku0825) 2019年10月31日
UPDATE setup_consumers SET ENABLED='YES' WHERE NAME='events_transactions_history_long'して、events_statements_history_longテーブルを使用するようにするともっと多くのクエリを確認することができます。