show processlist查看正在执行的SQL语句

最近遇到MySQL 报警,cpu突然飙高的情况,上去想看看是什么原因,运维找了过来。这个过程接触了 show processlist,于是整理和记录一下。

MySQL使用show processlist查看正在执行的SQL语句,通过show processlist查看正在执行的sql的情况以及及时kill死锁的SQL,通过EXPLAIN分析需要优化的sql语句。

命令行登录MySQL

mysql -u root -p -P 3306

之后输入密码即可。

查看执行的SQL语句

mysql> show processlist;

得到的结果,类似这样的:

+----+-----------------+-----------+------+---------+---------+------------------------+------------------+
| Id | User            | Host      | db   | Command | Time    | State                  | Info             |
+----+-----------------+-----------+------+---------+---------+------------------------+------------------+
|  4 | event_scheduler | localhost | NULL | Daemon  | 1122260 | Waiting on empty queue | NULL             |
| 10 | root            | localhost | NULL | Query   |       0 | starting               | show processlist |
+----+-----------------+-----------+------+---------+---------+------------------------+------------------+
2 rows in set (0.01 sec)

如何定位

当MySQL繁忙的时候运行show processlist,会发现有很多行输出,每行输出对应一个MySQL连接。怎么判断发起连接的进程是哪个?它当前正在做什么任务,执行什么SQL呢?

首先,需要通过TCP Socket而不是Unix Socket连接MySQL,这样在show processlist的输出中就会有来源端口号。

lsof查看端口号

lsof -i:78934  #查看端口连接情况

(完)

发表评论

邮箱地址不会被公开。 必填项已用*标注