MySQL kill コマンドの使用ガイド

MySQL kill コマンドの使用ガイド
KILL [接続 | クエリ] processlist_id

MySQL では、各接続は個別のスレッドとして実行されます。ステートメントの実行を終了するには、KILL processlist_id ステートメントを使用できます。

KILL ではオプションの CONNECTION または QUERY 修飾子を使用できます。

  • KILL CONNECTION KILL は修飾子なしと同じです。つまり、その接続によって実行されているすべてのステートメントを終了した後、指定された processlist_id に関連付けられた接続を終了します。
  • KILL QUERY は、接続で現在実行中のステートメントを終了しますが、接続自体はそのまま残ります。

すべてのIDを表示するにはshow processlistを使用します

キルコマンドの使用

アプリケーションが SQL を実行し、更新のためのロック選択または数が多すぎるために SQL の実行がデータベース内で停止した場合、SQL をキャンセルするにはどうすればよいでしょうか。kill コマンドを使用して、mysql スレッドを停止するか、SQL 実行をキャンセルすることができます。kill threadId コマンドを実行する必要がありますか、それとも kill query theadId コマンドを実行する必要がありますか。

kill と kill query の最大の違いは、接続上で実行されたすべての SQL をキャンセルするかどうか、つまりスレッドを閉じるかどうかです。スレッドが閉じられる場合、JDBC ではステートメントを閉じることに相当します。

-- データベースは acctno=13 のレコードをロックし、次の更新ステートメントを実行します: update test set acctname ='12' where acctno=13

SQLを実行しているスレッドIDを表示するには、プロセスリストを表示します。

SQL 実行をキャンセルしたい場合は、kill query 407 コマンドを使用して SQL 実行をキャンセルできます。実行後、407 スレッドは消えません。接続上で SQL 実行がある場合は実行が継続されますが、kill 407 を使用すると 407 スレッドは消えます。ご利用の際は両者の違いにご注意ください。

show processlistでスレッドIDを表示するだけでなく、プログラム的な方法でthreadIdを取得することもできます。

 接続 connection = getConnection();
 ((MysqlConnection)接続).getSession().getThreadId();

ステートメントキャンセルメソッド

JDBCプログラミングを使用してデータベースを操作する場合、Statementオブジェクトのcancelメソッドを使用してキャンセルすることもできます。MySQLドライバは、内部的にKill query threadId命令も送信します。MySQLドライバのcancelメソッドのソースコード

 パブリック void cancel() は SQLException をスローします {
    試す {
      if (this.query.getStatementExecuting().get()) {
        if (!this.isClosed && this.connection != null) {
          JdbcConnection の cancelConn = null;
          オブジェクト cancelStmt = null;

          試す {
            ホスト情報 ホスト情報 = this.session.getHostInfo();
            文字列データベース = hostInfo.getDatabase();
            文字列ユーザー = StringUtils.isNullOrEmpty(hostInfo.getUser()) ? "" : hostInfo.getUser();
            文字列パスワード = StringUtils.isNullOrEmpty(hostInfo.getPassword()) ? "" : hostInfo.getPassword();
            NativeSession の新しいセッション = 新しい NativeSession (this.session.getHostInfo()、this.session.getPropertySet());
            newSession.connect(hostInfo、ユーザー、パスワード、データベース、30000、新しいTransactionEventHandler() {
              パブリックボイドトランザクション完了() {
              }

              パブリックボイドトランザクション開始() {
              }
            });
            // ドライバーは KILL QUERY + threadId コマンドを使用してキャンセルします。newSession.sendCommand((new NativeMessageBuilder()).buildComQuery(newSession.getSharedSendPacket(), "KILL QUERY " + this.session.getThreadId()), false, 0);
            this.setCancelStatus(CancelStatus.CANCELED_BY_USER);
          } キャッチ (IOException var13) {
            SQLExceptionsMapping.translateException(var13、this.exceptionInterceptor) をスローします。
          ついに
            キャンセルStmt != null の場合 {
              ((ステートメント)cancelStmt).close();
            }

            キャンセルコン!= nullの場合{
              ((JdbcConnection)cancelConn).close();
            }

          }
        }

      }
    } キャッチ (CJException var15) {
      SQLExceptionsMapping.translateException(var15, this.getExceptionInterceptor()) をスローします。
    }
  }

クライアントツールの実行

クライアント ツールは、SQL を実行した後に実行をキャンセルします。一部のツールは kill コマンドを送信し、一部のツールは kill クエリ命令を送信します。パケット キャプチャ ツールを使用して、Navicat ツールが送信する命令を確認できます。推奨されるパケット キャプチャ ツールは、非常に強力な Wireshark です。

これは kill コマンドであり、対応するスレッド ID は 407 です。一部のツールでは、kill クエリ コマンドも送信されます。

上記はMySQL killコマンド使用ガイドの詳細な内容です。MySQL killコマンドの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL killコマンドの実行原理の詳細な説明
  • MySQL のデータの偶発的な削除の解決策と kill ステートメントの原則
  • Mysql は、デッドロック問題を解決するために kill コマンドを使用します (実行中の特定の SQL ステートメントを強制終了します)。
  • MySQL スレーブが oom-killer をトリガーする問題の解決方法
  • MySQL OOM シリーズ 3: MySQL が殺されるという不運から逃れる
  • MySQL OOM システム 2 OOM キラー
  • percona-toolkit の pt-kill メソッドを使用して、mysql クエリまたは接続を強制終了します。
  • MySQL で長時間実行される SQL をバッチで強制終了する
  • MySQLのkillがスレッドをkillできない理由

<<:  はじめに: HTML の基本的なタグと属性の簡単な紹介

>>:  Zabbix ベースの Jenkins プロセス監視の詳細な説明

推薦する

Web フォームの入力要素の高度な使用例 11 選

1. ボタンが押されたときに点線のボックスをキャンセルする<br />入力に属性値hid...

CentOS に Memcached と PHP Memcached 拡張機能をインストールする

高性能分散メモリオブジェクトキャッシュシステムMemcachedについては、別の記事「Windows...

Vueフォームで画像を処理する方法

質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...

シェルスクリプトによるDockerコンテナの起動順序の制御の詳細な説明

1. 遭遇した問題分散プロジェクトの展開プロセスでは、サーバーの再起動後にアプリケーション(データベ...

Linux システムでのスケジュールされたタスクの紹介

目次1. 計画タスクをカスタマイズする2. 時間を同期する3. 練習する4. セキュリティの問題1....

Vue で eslint 検出をオフにする方法 (複数の方法)

目次1. 問題の説明2. 問題解決1. 問題の説明Vue プロジェクトを開発する場合、作成時に誤って...

Chrome 4.0 は GreaseMonkey スクリプトをサポートします

GreaseMokey (中国語では Grease Monkey Script と呼んでいます) は...

フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)

2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...

WeChatアプレットのスクロールビューが左右にスライドできない問題を解決する方法

私は現在、自分自身の小さなプログラム プロジェクトに取り組んでいます。プロフェッショナルなフロントエ...

Linux のよく使うコマンドの使い方を詳しく解説(第 2 回)———— テキストエディタのコマンド vi/vim

vi/vim の紹介どちらもマルチモード エディターです。違いは、vim が vi のアップグレー...

JDKネイティブスレッドプールのバグを修正するTomcatの実装原理

処理能力と同時実行性を向上させるために、Web コンテナは通常、リクエストを処理するタスクをスレッド...

ユーザーのニーズがマーケティング指向のデザインにつながる

<br />それぞれのトピックについて、チーム内でメールで議論します。議論が白熱するにつ...

VUE レンダリング機能の使い方と詳細な説明

目次序文レンダリングの役割レンダリング機能の説明レンダリングとテンプレートの違いレンダリング例要約す...

docker-compose で Jenkins をインストールする際の実践的なメモ

ディレクトリを作成する cd /usr/local/docker/ jenkins-docker を...

XHTML CSS ページをプリンタ ページに変換する

<br />これまで、Web ページのプリンタ対応バージョンを作成するには、印刷したとき...