MySQLのshow processlistを特定の条件でフィルタリングする【小ネタ】

MySQL関連の小ネタです。

MySQLが重いと感じた場合に「show processlist」① で今のMySQLの状態を確認できます。

しかし、①のSQLには一点問題があります。それはWHERE句が使えないことです。MySQLに対して大量の接続が発生している場合に、①のSQLを実行しても表示が流れてしまうため、どのプロセスをkillすればよいのか特定するのに苦労します。

WHERE句が使えればいいのにと思っていましたが、MySQL5以降では「SELECT * FROM information_schema.PROCESSLIST」②で①のSQLと同じ結果が得られます。②のSQLの素晴らしいところは通常のSELECT文ですので、WHERE句が使えるところです。

ですので、ステータスや実行時間、接続元によってフィルタリングやソートができます。例えば、ロック待ち以外のプロセスを表示したり、実行時間が60秒以上のプロセスを表示したりと色々活用できます。

意外と便利ですので、MySQLをよく使う方は覚えておくと良いかと思います!