MySQL之show processlist命令使用

背景
在运维MySQL时,经常遇到的一个问题就是活跃连接数飙升。一旦遇到这样的问题,都根据后台保存的processlist信息,或者连上MySQL环境,分析MySQL的连接情况。
真实故障处理时,光知道连接分布情况往往还不够,我们需要知道当前MySQL的正在忙于做什么,也就是正在执行一些什么样的SQL。而且,有时候即使我们知道了当前执行的SQL情况,也很难找到根因,因为如果活跃连接一旦飙升,这时的CPU基本上是处于被打满的状态,IO的负载也非常高,即使平时很快的SQL也变成了慢SQL,更不用说本身就很慢的SQL了。那我们怎么去甄别这些SQL里,哪些是导致问题的罪魁祸首,哪些仅仅是受害者呢?
show processlist是什么
show processlist:通过查看mysql的官网,可以发现,其主要是查询数据库中哪些线程正在执行,针对比较慢的线程(time的数值比较大的线程)我们可以将其kill掉。此外,show full processlist 返回的结果是实时变化的。
show processlist使用
想知道当前MySQL的连接信息,最直观的方法是看MySQL的processlist,如果有SUPER权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指当前对应的MySQL帐户运行的线程),如果希望看到完整的SQL,可以执行show full processlist,或者直接查information_schema中的processlist这个表。当MySQL中连接数比较少的时候,还能够人肉分析出来,可是如果连接数比较多,那就很难考肉眼看processlist去分析问题了.
查看MySQL的processlist方式一:
SHOW FULL PROCESSLIST;
查看MySQL的processlist方式二:
SELECT
Id,
USER,
HOST,
TIME,
command,
INFO
FROM
information_schema. PROCESSLIST
WHERE
INFO IS NOT NULL
ORDER BY
TIME DESC;
show processlist分析

ID:线程ID,这个信息对统计来说没有太大作用
USER:连接使用的账号,这个是一个统计维度,用于统计来自每个账号的连接数
HOST:连接客户端的IP/hostname+网络端口号,这也是一个统计维度,用于确定发起连接的客户端
DB:连接使用的default database,DB通常对应具体服务,可以用于判断服务的连接分布,这算一个统计维度
COMMAND:连接的动作,实际上是说连接处于哪个阶段,常见的有Sleep、Query、Connect、Statistics等,这也是一个统计维度,主要用于判断连接是否处于空闲状态
TIME:连接处于当前状态的时间,单位是s,这个在后面进行分析,暂不算在连接状态的统计维度中
STATE:连接的状态,表示当前MySQl连接正在做什么操作,这算一个统计维度,可能的值也比较多,详细可以查阅官方文档(
https://dev.mysql.com/doc/refman/8.0/en/general-thread-states.html)
INFO:连接正在执行的SQL,如果没有语句执行则为null。这个语句可以使客户端发来的执行语句也可以是内部执行的语句
show processlist结果处理
在上面的步骤中,我们可以查到每个线程的执行时间等信息,因此针对执行时间比较长的线程,我们可以直接将其kill掉,直接执行 kill Id号即可。
比如要查时间超过5分钟的,可以拼接并执行以下sql:
select concat('kill ', id, ';') from information_schema.processlist where command != 'Sleep' and time > 5*60 order by time desc;
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36