SHOW PROCESSLIST - 连接数过高时如何获取全部列表

今天工作中突然出现MySQL某表长期锁表,SQL造成堆积的情况,紧急使用show processlist命令查看,发现超过800个MySQL连接。怀疑发生表死锁,希望查看最前面的几条数据,尝试使用

SHOW `processlist` LIMIT 10;
SHOW `processlist` INTO OUTFILE '/tmp/process.list'
SHOW `processlist` WHERE ...

发现均不支持。 查询文档后发现几个方案:

  1. processlist 实际上是information_schema数据库的一张表,于是通过查表的方式一定是可以实现的:
SELECT `user`, `host`, `time`, `command`, `time`
FROM `information_schema`.`processlist`
WHERE `user` = 'me' AND `state` IS NOT NULL;

但是,作为RD线上数据库我们很可能没有足够的权限查看此表,只能使用其他方法进行查看 2. 使用mysql shell命令导出mysql -e 可以直接执行sql,并返回结果

$ mysql -uusername -p -e 'show processlist' > process.list
  1. 使用mysqladmin 命令,mysqladmin与mysql命令一样都是mysql官方提供的shell操作命令,提供了常用的管理工具
$ mysql -uusername -p processlist > process.list

总结

三种方案都可以解决查看所有进程的需求,但是mysqladmin命令有两个额外的配置项,我们查看mysqladmin的帮助文档可以看到:

Administration program for the mysqld daemon.
Usage: mysqladmin [OPTIONS] command command....
  -c, --count=#       Number of iterations to make. This works with -i
  -i, --sleep=#       Execute commands repeatedly with a sleep between.

-i 命令可以设置查询间隔 -c 命令可以可以设置查询次数 以此可实现更完善的数据库运行状态分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值