如何在MySQL中查找当前执行且处于锁/闩锁状态的查询
查询MySQL中处于锁或闩锁状态的正在执行查询
可以结合MySQL的系统视图,编写以下SQL语句筛选出当前正在执行且处于锁/闩锁等待状态的查询:
SELECT pl.id AS process_id, pl.user, pl.host, pl.db, pl.command, pl.time AS wait_duration_seconds, pl.state, esc.sql_text AS executing_query, ew.wait_event_type, ew.wait_event_name FROM information_schema.processlist pl JOIN performance_schema.events_statements_current esc ON pl.id = esc.processlist_id LEFT JOIN performance_schema.events_waits_current ew ON esc.thread_id = ew.thread_id WHERE pl.state LIKE '%lock%' OR (ew.wait_event_type = 'LOCK' AND ew.wait_event_name NOT LIKE '%metadata%') OR pl.state LIKE '%latch%' ORDER BY pl.time DESC;
关键说明:
information_schema.processlist:提供当前所有数据库连接的进程信息,通过state字段初步锁定锁相关等待状态(如Waiting for row lock、Waiting for table lock)。performance_schema.events_statements_current:关联获取进程正在执行的SQL语句原文。performance_schema.events_waits_current:精准识别锁/闩锁类型的等待事件,可通过wait_event_name排除非业务锁场景(比如元数据锁),按需调整过滤条件。- 按等待时长倒序排列,优先关注等待时间久的查询。
内容的提问来源于stack exchange,提问作者Kavin Kumar
相关产品推荐
相关产品推荐

