読者です 読者をやめる 読者になる 読者になる

文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

MySQLのshow processlistを数秒おきに実行してSQLを監視する

mysql

watchコマンドを利用して、mysqlのshow processlistを数秒おきに実行することができます。
こんな感じです↓引数にインターバルを指定できるようにしています。

#!/bin/sh
interval=$1
# インターバルの単位は秒で初期値は1秒
test -z $interval && interval=1
watch -n $interval --differences "mysql -uroot -Dtest --table -Be 'show processlist;'"

ポイントは、--table -Bのオプションで、これが無いと罫線が表示されず、見難いかと思います。
このオプションをつけると罫線が表示され、大変見易くなります。
あと、--differencesをつけておくと、どこが変更されたかが解り易く表示されます。

--table無しの場合の表示

Every 1.0s: mysql -uroot -Dtest -Be 'show processlist;'                                                        Tue Jan 24 13:44:15 2012

Id      User    Host    db      Command Time    State   Info
258     root    localhost       test  Query   0       NULL    show processlist

--table有りの場合の表示

Every 1.0s: mysql -uroot -Dtest --table -Be 'show processlist;'                                                Tue Jan 24 13:45:33 2012
+-----+------+-----------+--------+---------+------+-------+------------------+
| Id  | User | Host      | db     | Command | Time | State | Info             |
+-----+------+-----------+--------+---------+------+-------+------------------+
| 271 | root | localhost | test   | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+--------+---------+------+-------+------------------+