MySQLで実行中のクエリを停止する方法|KILLコマンドとmysql.rds_killの使い方
MySQLで実行中のクエリを停止する基本
MySQLでは、重い処理や暴走したクエリが原因でサーバーのパフォーマンスが低下することがあります。そのような場合、実行中のクエリを強制的に停止する必要があります。MySQLには主に2つの停止方法があります。
- KILLコマンド:プロセスID(processId)を指定して接続やクエリを終了させる標準的な方法
- mysql.rds_killストアドプロシージャ:Amazon RDSなどの環境で利用できる代替手段
KILLコマンドの構文
実行中のMySQLクエリを停止するには、KILLコマンドにプロセスIDを指定します。基本的な構文は以下のとおりです。
kill プロセスID;
また、RDS環境などでは次の構文でも実行中のクエリを停止できます。
CALL mysql.rds_kill(クエリID);
STEP1:SHOW PROCESSLISTでプロセスIDを確認する
まず、現在動作しているプロセスの一覧とそのIDを取得しましょう。以下のコマンドを実行します。
mysql> SHOW PROCESSLIST;
実行結果は次のように表示されます。
+----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+ | 4 | event_scheduler | localhost | NULL | Daemon | 221718 | Waiting on empty queue | NULL | | 47 | root | localhost:60722 | business | Query | 0 | starting | show processlist | +----+-----------------+-----------------+----------+---------+--------+------------------------+------------------+ 2 rows in set (0.03 sec)
この例では、2つのプロセスが稼働しています。各カラムの意味は以下のとおりです。
- Id:プロセスを識別する一意の番号。KILLコマンドで使用します
- User / Host:接続元のユーザーとホスト情報
- db:使用中のデータベース名(NULLの場合は未選択)
- Command / Time / State:実行中のコマンド種別、経過時間、状態
- Info:実行中のSQL文の内容
特定のプロセスを停止したい場合は、この「Id」の値を使ってKILLコマンドを実行します。
STEP2:KILLコマンドでクエリを停止する
例として、IDが47のプロセスを停止してみます。実行すると、対象のクエリは中断されます。
mysql> KILL 47; ERROR 1317 (70100): Query execution was interrupted
表示されている「ERROR 1317 (70100): Query execution was interrupted」というメッセージはエラーではなく、「クエリの実行が中断された」ことを示す正常な反応です。これにより、対象のクエリが強制終了されたことがわかります。
STEP3:mysql.rds_killを使う方法(AWS RDSなど)
Amazon RDSなど一部の環境では、SUPER権限による直接のKILLが制限されている場合があります。そのような場合は、mysql.rds_killストアドプロシージャを使用します。
mysql> CALL mysql.rds_kill(47); ERROR 2013 (HY000): Lost connection to MySQL server during query
こちらも同様に、表示されるメッセージは対象の接続・クエリが終了したことを意味しており、問題なく停止できています。
補足:KILL CONNECTIONとKILL QUERYの違い
KILLコマンドには2つのバリエーションがあり、用途に応じて使い分けると便利です。
- KILL connection_id:指定した接続自体を切断し、その接続上の処理をすべて終了させます
- KILL QUERY connection_id:接続は維持したまま、現在実行中のステートメントだけを中断します
長時間実行されているクエリだけを止めたい場合は「KILL QUERY」を、不正な接続ごと切断したい場合は通常の「KILL」を使用するのがおすすめです。
まとめ
MySQLで実行中のクエリを停止する手順は以下のとおりです。
SHOW PROCESSLIST;で対象プロセスのIDを確認するKILL ID;またはCALL mysql.rds_kill(ID);を実行して停止する
表示されるエラーメッセージはクエリが中断されたことの通知なので、心配ありません。重いクエリがサーバーに負荷をかけている場合は、これらのコマンドを活用して素早く対処しましょう。
-
MySQLでNULL値を0に置き換える方法:IFNULL関数の使い方を解説
MySQLでクエリを実行した際にNULL値が返ってくる場合、IFNULL()関数を使うことで、NULLを別の値(ここでは0)に置き換えることができます。この記事では、実際にテーブルを作成し、NULL値を含むデータに対してIFNULL()を適用する手順を順番に解説します。サンプルテーブルの作成まず、テスト用のテーブルを作成します。Idカラムは自動採番の主キーとし、ValueカラムにはNULLを許容するように定義します。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMAR
-
MySQLクエリでOR文が多すぎるのを避けるには?IN()の活用方法を解説
MySQLでは、複数の条件を指定するときにOR文を何度も繰り返し書くと、クエリが長くなり読みにくくなります。そんなときはIN()を使うことで、クエリをシンプルかつ効率的に記述できます。この記事では、実際にテーブルを作成し、IN()の使い方を実行例とともにわかりやすく解説します。 サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。以下のコマンドで「DemoTable」を作成します。 mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMAR