我正在编写一个“系统检查”bash脚本,对于其中一项,我想检查mysql中所有正在运行的进程,但我只关心它们的状态是否高于30。在mysql中,有没有办法只显示状态高于x的进程列表,比如超过30个?我试过了 show processlist where state>=30; 我有版本5.5.58-0+deb8u1。
show processlist where state>=30;
nbysray51#
以下网站可能会帮助你!https://makandracards.com/makandra/7681-show-mysql-process-list-without-sleeping-connections
apeeds0o2#
正如@hariraman radhakrishnan回答的那样 SHOW PROCESSLIST 无法修改命令。然而,从他的链接来看 SHOW PROCESSLIST 实际上是从 information_schema.processlist 这意味着您可以对 information_schema.processlist 这样地:
SHOW 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:“线程处于当前状态的时间(以秒为单位)。”
COMMAND = 'Sleep'
SELECT * FROM information_schema.processlist WHERE COMMAND != 'Sleep' AND TIME > 30;
2条答案
按热度按时间nbysray51#
以下网站可能会帮助你!
https://makandracards.com/makandra/7681-show-mysql-process-list-without-sleeping-connections
apeeds0o2#
正如@hariraman radhakrishnan回答的那样
SHOW PROCESSLIST
无法修改命令。然而,从他的链接来看
SHOW PROCESSLIST
实际上是从information_schema.processlist
这意味着您可以对information_schema.processlist
这样地:如果你看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:“线程处于当前状态的时间(以秒为单位)。”