web-dev-qa-db-ja.com

MySQL-クエリの実行に許可される最大時間を制限できますか?

Mysqlサーバーでのクエリの最大実行時間を制限する方法を探しています。これはmy.cnf構成ファイルを介して実行できると思いましたが、ドキュメントに関連するものが見つかりませんでした。これができるかどうか誰かが知っていますか?ありがとう。

15
sa125

実行するクエリをサーバーに送信するときに、最大実行時間を指定する方法はありません。

ただし、データベースサーバー上で毎秒実行されるcronジョブがあり、接続して次のようなことを行うことは珍しくありません。

  1. プロセスリストを表示
  2. クエリ時間が最大希望時間よりも長いすべての接続を検索します
  3. これらのプロセスごとにKILL [プロセスID]を実行します
14
TehShrike

次のようにクエリを使用できます。

SELECT MAX_STATEMENT_TIME=1000 * FROM table;

更新:代わりにmax_execution_timeを使用する必要があります。

SELECT /*+ MAX_EXECUTION_TIME(1000)*/ * FROM table;

MySQL 5.7.8では、MAX_STATEMENT_TIMEの名前がmax_execution_timeに変更されました。 http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time

10

その間に、Twitterチームはこれを実装するMySQLへの変更をリリースしました。

- Reduce unnecessary work through improved server-side statement timeout support. This allows the server to proactively cancel queries that run longer than a millisecond-granularity timeout.

http://engineering.Twitter.com/2012/04/mysql-at-Twitter.html および https://github.com/Twitter/mysql/wiki/Statement-)を参照してください。タイムアウト

5
faker

http://mysqlserverteam.com/server-side-select-statement-timeouts/

興味深いアップグレード。私はそれをチェックします:

「MySQL5.7.4では、最上位の読み取り専用SELECTステートメントに対してサーバー側の実行時間制限をミリ秒単位で設定する機能が導入されています」。

SET GLOBAL MAX_STATEMENT_TIME=1000;
SET SESSION MAX_STATEMENT_TIME=2000;
SELECT MAX_STATEMENT_TIME=1000 * FROM table;
4
Grenville Tryon