MySQLで実行中のクエリを安全に停止する方法:リスクと回避策
MySQLで実行中のクエリを停止するには、いくつかの方法があります。
方法
- KILLコマンド
KILL <process_id>;
KILL
コマンドは、指定されたIDのプロセスを強制終了します。プロセスIDは、SHOW PROCESSLIST
コマンドで確認できます。
- mysqladminコマンド
mysqladmin kill <process_id>
mysqladmin
コマンドは、KILL
コマンドと同様に、指定されたIDのプロセスを強制終了します。
- GUIツール
MySQL WorkbenchなどのGUIツールを使用すると、実行中のクエリを一覧表示して、停止することができます。
注意事項
KILL
コマンドは、実行中のクエリを強制終了するため、データ損失が発生する可能性があります。KILL
コマンドを実行する前に、SHOW PROCESSLIST
コマンドでクエリの実行状況を確認することをおすすめします。- GUIツールを使用する場合は、ツールの使用方法をよく確認してから実行してください。
KILL
コマンドを実行してもクエリが停止しない場合は、mysqld
サーバーを再起動する必要がある場合があります。KILL
コマンドを頻繁に実行する必要がある場合は、クエリのチューニングを検討する必要があります。
補足
processlist
は、実行中のプロセスのリストを表示するコマンドです。KILL
コマンドは、processlist
で表示されるId
を使用して、特定のプロセスを強制終了することができます。
例
# 実行中のプロセスのリストを表示
SHOW PROCESSLIST;
# IDが1234のプロセスを強制終了
KILL 1234;
改善点
- 各方法の説明を簡潔にしました。
- その他の情報を追加しました。
# 実行中のプロセスのリストを表示
SHOW PROCESSLIST;
# IDが1234のプロセスを強制終了
KILL 1234;
# IDが1234のプロセスを強制終了
mysqladmin kill 1234
MySQL Workbench
- MySQL Workbenchを起動し、接続する。
- 左側のツリーから「クエリ」タブを選択する。
- 実行中のクエリの一覧が表示されるので、停止したいクエリを選択する。
- ツールバーの「クエリを中止」ボタンをクリックする。
- 上記のサンプルコードは、あくまで参考です。
- 実行環境に合わせて、コードを変更する必要があります。
pt-kill
コマンドは、Percona Toolkitに含まれるツールで、実行中のMySQLクエリを停止することができます。
# インストール
apt install percona-toolkit
# 実行
pt-kill <process_id>
KILL QUERY <process_id>;
SET GLOBAL max_execution_time=0;
max_execution_time
変数を0に設定すると、実行時間が制限時間を超えたクエリは自動的に中止されます。
SET GLOBAL max_execution_time=0;
SHOW ENGINE INNODB STATUS;
コマンドは、InnoDBエンジンに関する情報を表示します。この情報を使用して、長時間実行されているクエリを特定することができます。
KILL QUERY
コマンドやSET GLOBAL max_execution_time=0;
コマンドは、実行中のクエリを強制終了するため、データ損失が発生する可能性があります。
mysql kill processlist