kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

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大先生のアドバイスから導出することができました。

UPDATE setup_consumers SET ENABLED='YES' WHERE NAME='events_transactions_history_long'して、events_statements_history_longテーブルを使用するようにするともっと多くのクエリを確認することができます。