実行中クエリの確認(show processlist)と強制終了(kill)

クエリの結果が返ってこなくて困った経験はないでしょうか?ここでは、実行中クエリの確認方法と強制終了させる方法について紹介します。

目次

実行中クエリの確認

show processlist; を実行すると、実行中クエリを確認できます。

mysql> show processlist;
+-----+------+--------------------+--------------+---------+------+--------------+------------------------------------+
| Id  | User | Host               | db           | Command | Time | State        | Info                               |
+-----+------+--------------------+--------------+---------+------+--------------+------------------------------------+
| 243 | root | localhost          | NULL         | Query   |    0 | starting     | show processlist                   |
| 244 | root | 192.168.55.1:62642 | test         | Sleep   |    4 |              | NULL                               |
| 245 | root | 192.168.55.1:62643 | test         | Query   |    9 | Sending data | SELECT * FROM `posts` LIMIT 0,1000 |
+-----+------+--------------------+--------------+---------+------+--------------+------------------------------------+
3 rows in set (0.00 sec)

SELECT * FROM posts LIMIT 0,1000 というクエリが実行中であることがわかります。

info は上限100文字となっています。
クエリ全文を確認したいのであれば、show full processlist;を実行します。

注意|すべてのクエリが表示されない

他のユーザーが実行したクエリも表示するには、 PROCESS権限 が必要です。PROCESS権限 の設定は、 mysql.user テーブルの Process_priv カラムで行われています。

mysql> SELECT User, Process_priv FROM mysql.user;
+---------------+--------------+
| User          | Process_priv |
+---------------+--------------+
| root          | Y            |
| mysql.session | N            |
| mysql.sys     | N            |
+---------------+--------------+
3 rows in set (0.00 sec)

実行中クエリの強制終了

kill プロセスID でクエリを強制終了できます。

さきほどの、 SELECT * FROM posts LIMIT 0,1000 を強制終了させたいのであれば、以下のようにします。

mysql> kill 245;
よかったらシェアしてね!
目次