• 如何查看正在执行的mysql语句?
  • 发布于 2个月前
  • 503 热度
    0 评论

首先:processlist表位于information_schema库中,主要是存储的MySQL线程的一些基本信息。我们使用desc information_schema.processlist来查看表结构:

ID: 线程的id
USER: 线程属于哪一个用户
HOST:客户端的host信息:hostname+端口
DB:线程在哪一个数据库下
COMMAND:线程使用哪一种命令在执行,空闲的线程状态为sleep
TIME:线程已经运行的时间,秒为单位
STATE:线程正在做什么:当前的状态,行为,或者事件
INFO:线程正在执行的语句,但是这个并不是很准确,所以需要使用其他的方式来完成我们的目标。使用show processlist 或者 select * from information_schema.processlist查看processlist表。并且可以直接kill掉卡死的进程信息
show processlist 
select * from information_schema.processlist
1.拿到正在执行的processlist_id
select id from information_schema.processlist
2.拿到与processlist_id对应的thread_id
select thread_id from performance_schema.threads where processlist_id in (上一步拿到的processlist_id列表)
3.拿到正在执行的sql语句
select thread_id, sql_text from performance_schema.events_statements_current where thread_id in (上一步拿到的thread_id列表)
4.完整的sql语句如下:
SELECT a.*, c.thread_id, c.sql_text from information_schema.processlist a
LEFT JOIN performance_schema.threads b on a.id = b.PROCESSLIST_ID
LEFT JOIN performance_schema.events_statements_current c on c.THREAD_ID = b.THREAD_ID;


用户评论