如何在mysql中自定义`show processlist`?

时间:2009-05-30 11:53:18

标签: mysql filter sql-order-by processlist

我想按时间排序,但似乎无法做到这一点?

mysql> show processlist;
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
| Id     | User        | Host               | db   | Command | Time   | State                            | Info                                                                                                 |
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
|      1 | system user |                    | NULL | Connect | 226953 | Waiting for master to send event | NULL                                                                                                 | 
|      2 | system user |                    | v3   | Connect |  35042 | Locked                           | update postings a
                                left join cities b on b.id=a.job_city_id
                                left join states h on h.id=b.stat | 
| 313888 | irnadmin    | 172.19.0.239:40136 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314075 | irnadmin    | 172.19.0.239:41113 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314118 | irnadmin    | 172.19.0.239:41282 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 314686 | irnadmin    | 172.19.0.239:43251 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314732 | irnadmin    | 172.19.0.239:43436 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 314984 | irnadmin    | 172.19.0.239:44366 | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 315051 | irnadmin    | 172.19.0.239:44713 | v3   | Query   |      0 | NULL                             | NULL                                                                                                 | 
| 315198 | irnadmin    | 172.19.0.239:51569 | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 315280 | irnadmin    | 172.19.0.239:51849 | v3   | Query   |  34978 | freeing items                    | SELECT id, email_address, type, closed, robotno FROM accounts WHERE screen_name = 'ShantanuS'        | 
| 315320 | irnadmin    | 172.19.0.239:52045 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 315384 | irnadmin    | 172.19.0.239:52463 | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452248 | irnadmin    | 172.19.0.28:54899  | v3   | Query   |  34978 | freeing items                    | SELECT id, email_address, type, closed, robotno FROM accounts WHERE screen_name = 'LIZW0218'         | 
| 452291 | irnadmin    | 172.19.0.28:55045  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452316 | irnadmin    | 172.19.0.28:55144  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452353 | irnadmin    | 172.19.0.28:55278  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452382 | irnadmin    | 172.19.0.28:55371  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 452413 | irnadmin    | 172.19.0.28:55479  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452541 | irnadmin    | 172.19.0.28:55946  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 452626 | irnadmin    | 172.19.0.28:56215  | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 452711 | irnadmin    | 172.19.0.28:39916  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452781 | irnadmin    | 172.19.0.28:40161  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452904 | irnadmin    | 172.19.0.28:40955  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 453014 | irnadmin    | 172.19.0.28:41291  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 453057 | irnadmin    | 172.19.0.28:41377  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 453084 | irnadmin    | 172.19.0.28:41441  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453112 | irnadmin    | 172.19.0.28:41536  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453156 | irnadmin    | 172.19.0.28:41653  | v3   | Query   |  34978 | freeing items                    | SELECT protocol FROM accounts WHERE email_address= '***@gtalk.jabber.jobirn.c | 
| 453214 | irnadmin    | 172.19.0.28:41800  | v3   | Sleep   |      5 |                                  | NULL                                                                                                 | 
| 453243 | irnadmin    | 172.19.0.28:41991  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453313 | irnadmin    | 172.19.0.28:42255  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 453396 | irnadmin    | 172.19.0.28:53718  | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 453476 | irnadmin    | 172.19.0.28:54019  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453561 | irnadmin    | 172.19.0.28:54352  | v3   | Sleep   |      3 |                                  | NULL                                                                                                 | 
| 453594 | irnadmin    | 172.19.0.28:54456  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453727 | irnadmin    | 172.19.0.28:55166  | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 453786 | irnadmin    | 172.19.0.28:55320  | v3   | Sleep   |      4 |                                  | NULL                                                                                                 | 
| 610140 | irnadmin    | 172.19.0.28:33848  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 685119 | irnadmin    | 172.19.0.27:37251  | v3   | Query   |  34980 | Sending data                     | select postings.id id,category, job_desc_title,
        IF(c1.name is not null,c1.name,IF(c2.name is not n | 
| 685226 | irnadmin    | 172.19.0.139:57274 | v3   | Query   |  34735 | Locked                           | SELECT job_desc_title,job_desc,job_state_name,job_city_name,company_categories.name,postings.categor | 
| 685229 | irnadmin    | 172.19.0.139:57278 | v3   | Query   |  34735 | Locked                           | SELECT job_desc_title,job_desc,job_state_name,job_city_name,company_categories.name,postings.categor | 
| 685232 | irnadmin    | 172.19.0.139:57283 | v3   | Query   |  34734 | Locked                           | select job_desc_title,job_desc from postings where id=287650                                         | 
| 685233 | irnadmin    | 172.19.0.139:57286 | v3   | Query   |  34734 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 685235 | irnadmin    | 172.19.0.28:37502  | v3   | Query   |  34734 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 686496 | irnadmin    | 172.19.0.239:33306 | v3   | Query   |  32589 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 686503 | irnadmin    | 172.19.0.28:54051  | v3   | Query   |  32588 | Locked                           | SELECT job_desc_title, job_desc, IF(postings.category IS NOT NULL, postings.category, job_categories | 
| 709550 | root        | localhost          | v3   | Query   |      0 | NULL                             | show processlist                                                                                     | 
| 710084 | irnadmin    | 172.19.0.27:53285  | NULL | Query   |      0 | removing tmp table               | show status where Variable_name='Threads_running'                                                    | 
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
49 rows in set (0.00 sec)

7 个答案:

答案 0 :(得分:302)

较新版本的SQL支持information_schema中的进程列表:

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

您可以以任何您喜欢的方式订购。

在MySQL 5.1.7中添加了INFORMATION_SCHEMA.PROCESSLIST表。您可以找到您正在使用的版本:

SELECT VERSION()

答案 1 :(得分:47)

命令

show full processlist

可以替换为:

SELECT * FROM information_schema.processlist

但如果您使用后一版本,则可以向其添加WHERE子句:

SELECT * FROM information_schema.processlist WHERE `INFO` LIKE 'SELECT %';

了解更多信息visit this

答案 2 :(得分:6)

命令行界面的另一个有用工具是pager命令。

例如

pager grep -v Sleep | more; show full processlist;

然后您可以浏览结果。

您也可以通过这种方式使用grep或sed查找某些用户,IP或查询。

每个会话的寻呼机命令都是持久的。

答案 3 :(得分:3)

您可以捕获输出并将其传递给过滤器,例如:

mysql show processlist
    | grep -v '^\+\-\-'
    | grep -v '^| Id'
    | sort -n -k12

两个greps删除了标题和尾部行(如果有其他行不包含有用信息,则可能需要其他行),并且基于数字字段编号12完成排序(我认为是正确的)。

这个适用于您的即时输出:

mysql show processlist
    | grep -v '^\+\-\-'
    | grep -v '^| Id'
    | grep -v  '^[0-9][0-9]* rows in set '
    | grep -v '^ '
    | sort -n -k12

答案 4 :(得分:2)

如果您使用旧版本的MySQL,您可以随时使用\ P结合一些很好的awk代码。 这里有趣的例子

http://www.dbasquare.com/2012/03/28/how-to-work-with-a-long-process-list-in-mysql/

这不是你需要的吗?

答案 5 :(得分:1)

...我们还没有更新版本的MySQL,所以我能够做到这一点(仅适用于UNIX):

 host=maindb

 echo "show full processlist\G" | mysql -h$host | grep -B 6 -A 1 Locked

以上将查询所有锁定的会话,并返回所涉及的信息和SQL。

...所以 - 假设你想查询正在睡觉的会话:

  host=maindb

  echo "show full processlist\G" | mysql -h$host | grep -B 6 -A 1 Sleep

或者,假设您需要为MySQL提供其他连接参数:

  host=maindb

  user=me

  password=mycoolpassword 

  echo "show full processlist\G" | mysql -h$host -u$user -p$password | grep -B 6 -A 1 Locked

通过一些调整,我确信可以轻松创建一个shell脚本,以便按照您希望的方式查询进程列表。

答案 6 :(得分:0)

使用“|”作为分隔符

mysqladmin processlist| sort -t\| -n -k7

来自排序手册(man sort

<块引用>
   -k, --key=KEYDEF
          sort via a key; KEYDEF gives location and type
<块引用>
  -t, --field-separator=SEP
            use SEP instead of non-blank to blank transition
<块引用>
   -n, --numeric-sort
          compare according to string numerical value
<块引用>
   -r, --reverse
          reverse the result of comparisons