一部のSQLは適切に記述されていません。アプリケーションでの検索には数時間かかる場合があります。アプリケーション(おそらくWebサイト)が長時間実行されるクエリを送信すると、mysqlを再起動する必要があります。データベース側でSQLクエリの実行時間を制限するにはどうすればよいですか?
4 に答える
長い実行時間の後に MySQL でクエリを自動強制終了するには:
ストアド プロシージャを次のように作成します。
DECLARE CURSOR cur1 FOR SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Query' AND TIME > 120;
次に、curosr のループ内で次のようにします。
FETCH ID INTO @var_kill_id; KILL QUERY @var_kill_id;
その中に上記の手順を作成
EVENT FOR EVERY 5 SECONDS
します。CALL
注: KILL QUERY はクエリを強制終了するだけで、MySQL 接続は切断されません。ここを参照してください。
また、可能であれば、「max_statement_time」をサポートし、それを超えるクエリをミリ秒単位で強制終了する Twitter の mysql フォークを試すこともできます。
http://engineering.twitter.com/2012/04/mysql-at-twitter.htmlおよびhttps://github.com/twitter/mysql/wiki/Statement-Timeoutを参照してください。
元のソース。
唯一の選択肢は、別のセッションを開くには、SHOW PROCESSLISTを使用してから、終了するセッションをKILLQUERYすることです。
mysqladminコマンドラインツールを使用して、これらのコマンドを発行できます。
これは、SQL 実行時間を制限する正確な解決策ではないかもしれませんが、役立つと思います。MySQL サーバーを再起動する必要はまったくありません。
SQLyogなどの MySQL GUI ツールを使用してみてください。時間がかかっていると思われる場合は、実行されたクエリを手動で停止できます (スクリーン ショットの [X] ボタンを確認してください)。
さらに、プロセスリストにアクセスしてクエリプロセスを強制終了することもできますプロセスを強制終了する手順を含むスクリーンショットの他の2つの画像を確認してください...
それが役に立てば幸い....