24

プログラムで実行中のmysqlクエリを停止するにはどうすればよいですか?

私が直面している問題は、クエリがユーザー提供のデータを使用して構築され、実行に非常に長い時間がかかる場合があることです(大きなテーブルは1500万から3000万行)。ユーザーにキャンセルオプションを提供したいのですが、現在実行中のmysql-queryを停止する方法がわかりません。

アプリケーションはJavaアプレット-サーブレットです。ユーザーは、リクエストを処理するためにハンドラークラスが作成されるサーブレットに渡されるアプレットで基準を指定します。このハンドラークラスは、自己完結型の再接続-クエリ-mysqlへの切断です。

このシナリオで、実行中のmysql-queryをキャンセルするにはどうすればよいですか?

4

3 に答える 3

40
SHOW PROCESSLIST;
KILL <thread_to_be_killed>;

詳細については、ドキュメントを参照してください

プロセスリストを表示する

実行中のスレッドを強制終了します

于 2010-01-14T16:00:15.823 に答える
2

別の JDBC 接続が必要です。つまり、新しいデータベース ハンドラー インスタンスを作成する必要があります。SHOW PROCESSLISTステートメントを実行し、結果をループして、特定のユーザーで見つかった各スレッド ID に対してKILLステートメントを実行します。

これを行うために私が考えることができる唯一の信頼できる方法は、すべてのユーザーが別のユーザー名でデータベースにログインし、そのユーザーのすべてのスレッド ID を取得して、すべてのスレッドを強制終了することです。

于 2010-01-14T16:14:40.290 に答える
1

MySQL が提供する標準ライブラリを介して MySQL 固有のコマンドを発行し、KILL QUERYを実行できます。おそらく、プロセスを一覧表示し、最初に強制終了する必要があるスレッドを特定するのが最善の方法です。

ただし、アプリケーションによっては、これによりセキュリティ上の問題が発生する可能性があります (接続するアプリケーション ユーザーにより多くの権限を付与する必要があるため)。

于 2010-01-14T16:02:59.500 に答える