2011-01-25 1 views
14

私は、mysqlサーバのクエリの最大実行時間を制限する方法を探しています。私はこれがmy.cnf設定ファイルを通して実行できると考えましたが、ドキュメントに関連するものは見つかりませんでした。これができるかどうかは誰でも知ることができますか?ありがとう。MySQL - クエリの実行に許される最大時間を制限できますか?

+1

[mysqlクエリの最大実行時間を設定する方法](http://stackoverflow.com/questions/415905/how-to-set-a-maximum-execution-time- for-a-mysql-query) – miku

+0

これはlock_wait_timeoutを指していますが、これは私が必要とするものではありません。ロックが取得されたかどうかにかかわらず、クエリに有効期限のタイムアウトが必要です。 – sa125

答えて

13

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

  1. のSHOW PROCESSLIST
  2. が大きくクエリ時間とのすべての接続を検索:

    しかし、接続して、このような何かをやって、データベースサーバー上の毎秒実行するcronジョブを持つことは珍しいことではありませんそれらのプロセス一方

+2

良いアイデア - ありがとう! – sa125

+1

毎秒あなたの状況に応じて少し過剰なかもしれません。 max_connectionsがヒットしないようにするために、プロセスを強制終了する必要性を考えなければなりません。これは、特定のマシンの負荷に依存します。 – Ross

4

のそれぞれについて、あなたの最大の希望の時間

  • 実行KILL [プロセスID]よりも、Twitterのチームは、MySQL WHIへの変更をリリースchがこれを実装しています

    SELECT MAX_STATEMENT_TIME=1000 * FROM table; 
    

    UPDATE: あなたが代わりにmax_execution_timeはを使用する必要がありますが

    - 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.htmlhttps://github.com/twitter/mysql/wiki/Statement-Timeout

  • 2

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

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

    "MySQL 5.7.4では、最上位レベルの読み取り専用SELECTステートメントのミリ秒単位で指定されたサーバー側の実行時間制限を設定する機能が導入されています。

    SET GLOBAL MAX_STATEMENT_TIME=1000; 
    SET SESSION MAX_STATEMENT_TIME=2000; 
    SELECT MAX_STATEMENT_TIME=1000 * FROM table; 
    
    関連する問題