如何在状态高于x的mysql中显示完整的processlist?

trnvg8h3  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(279)

我正在编写一个“系统检查”bash脚本,对于其中一项,我想检查mysql中所有正在运行的进程,但我只关心它们的状态是否高于30。
在mysql中,有没有办法只显示状态高于x的进程列表,比如超过30个?
我试过了 show processlist where state>=30; 我有版本5.5.58-0+deb8u1。

nbysray5

nbysray51#

以下网站可能会帮助你!
https://makandracards.com/makandra/7681-show-mysql-process-list-without-sleeping-connections

apeeds0o

apeeds0o2#

正如@hariraman radhakrishnan回答的那样 SHOW PROCESSLIST 无法修改命令。
然而,从他的链接来看 SHOW PROCESSLIST 实际上是从 information_schema.processlist 这意味着您可以对 information_schema.processlist 这样地:

SELECT * 
FROM information_schema.processlist 
WHERE TIME > 30

如果你看https://dev.mysql.com/doc/refman/8.0/en/processlist-table.html,您可以看到每列的含义。
我编写了一个查询来选择运行了30秒以上的所有进程,但这也可能只是一个休眠连接,例如一个程序在开始时连接,然后保持连接活动,直到您再次关闭该程序。
这意味着该进程可以运行几分钟、几小时或几天,但将有 COMMAND = 'Sleep' 大多数时候。
如果只希望看到长时间运行的查询,则应将查询更新为: SELECT * FROM information_schema.processlist WHERE COMMAND != 'Sleep' AND TIME > 30; 当状态改变时,时间被重置
来自docs:“线程处于当前状态的时间(以秒为单位)。”

相关问题