MySQL Processlist--查看會話執行過的SQL情況


對於MySQL 5.7版本,可以使用sys.session視圖來查看會話最后一次執行的SQL:

SELECT * 
FROM sys.session 
WHERE CONN_ID = 20036 \G

其中sys.session視圖關聯到sys.processlist,而sys.processlist又使用到`performance_schema`.`events_statements_current`。

如果想查詢某個會話從開啟到現在的執行過的SQL情況,就需要使用到下列表:

performance_schema.events_statements_current
performance_schema.events_statements_history
performance_schema.events_transactions_history_long

上面三張表中記錄MySQL服務器最近執行過的SQL情況,但上面三張表中的表示時間的字段使用皮秒來表示,且不能直接使用FROM_UNIXTIME來轉換(不是以1970-01-01 00:00 或 0000-01-01 00:00為起點, 每個MySQL實例的起始基線不同)。

使用下面腳本可以查看到特定會話上的SQL執行情況:

SELECT @dt_ts:=UNIX_TIMESTAMP(NOW());
SELECT 
@dt_timer:=MAX(SH.TIMER_START)
FROM performance_schema.threads AS T1
INNER JOIN performance_schema.events_statements_history AS SH
ON T1.`THREAD_ID`=SH.`THREAD_ID`
WHERE T1.PROCESSLIST_ID=CONNECTION_ID();

SELECT 
SH.CURRENT_SCHEMA AS database_name,
REPLACE(REPLACE(REPLACE(SH.`SQL_TEXT`,'\n',' '),'\r',' '),'\t',' ') AS executed_sql,
FROM_UNIXTIME(@dt_ts-CAST((@dt_timer-SH.TIMER_START)/1000000000000 AS SIGNED)) AS start_time,
FROM_UNIXTIME(@dt_ts-CAST((@dt_timer+SH.TIMER_END)/1000000000000 AS SIGNED)) AS end_time,
(SH.TIMER_END-SH.TIMER_START)/1000000000000 AS used_seconds,
SH.TIMER_WAIT/1000000000000 AS wait_seconds,
SH.LOCK_TIME/1000000000000 AS lock_seconds,
SH.ROWS_AFFECTED AS affected_rows,
SH.ROWS_SENT AS send_rows
FROM performance_schema.threads AS T1
INNER JOIN performance_schema.events_statements_history AS SH
ON T1.`THREAD_ID`=SH.`THREAD_ID`
WHERE T1.PROCESSLIST_ID=946364
AND SH.TIMER_START<@dt_timer
ORDER BY SH.TIMER_START ASC;

輸出效果如下:

+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+
| SQL_TEXT                           | start_time          | end_time            | used_seconds | affected_rows | send_rows |
+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+
| select sleep(5)                    | 2019-07-29 19:59:55 | 2019-07-29 20:00:00 |       5.0003 |             0 |         1 |
| insert into tb001(c1,c2)select 2,4 | 2019-07-29 20:01:26 | 2019-07-29 20:01:26 |       0.0002 |             1 |         0 |
| insert into tb001(c1,c2)select 2,4 | 2019-07-29 20:04:34 | 2019-07-29 20:04:34 |       0.0001 |             1 |         0 |
+------------------------------------+---------------------+---------------------+--------------+---------------+-----------+

 

擴展:MySQL Transaction--查看未提交事務執行的SQL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM