一些OLAP的MySQL数据库中往往有很多复杂的存储过程,并存在相互调用的情况,在调试过程中需要知道过程中执行的sql和sql执行状态信息以便更好的了解执行情况。
MySQL版本:5.7.31
方案:
通过performance_schema中的events_statements_current和events_statements_history表信息跟踪存MySQL储过程执行情况
创建了存储过程test1和test2,test1会调用test2
当执行test1以后 # CALL test1();
events_statements_current中记录这最近一次存储过程执行的记录
SELECT
THREAD_ID,
EVENT_ID,
END_EVENT_ID,
EVENT_NAME,
DATE_SUB(
NOW(),
INTERVAL (
SELECT
VARIABLE_VALUE
FROM
performance_schema.global_status
WHERE
VARIABLE_NAME = 'UPTIME'
) - TIMER_START * 10e -13 second
) AS 'start_time', --转换时间
ROUND(timer_wait * 10E -10, 3) AS 'wait in (ms)',
LOCK_TIME,
SQL_TEXT
FROM
performance_schema.events_statements_current
WHERE
EVENT_NAME LIKE '%call_procedure';