MySQL でクエリ単位のタイムアウトを仕込む #mysql

やりたいこと

MySQL で重い可能性があるクエリを投げるときに、一定時間以上かかったら、タイムアウトとしてキャンセル用にしたい。

解決策

MySQL のシステム変数でタイムアウト関連の設定をいじるという手もあるが、max_execution_timeオプティマイザヒント句に埋め込むことで簡単にクエリ単位で動作させられる。

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

max_execution_time はミリ秒単位の数字で設定できる。

実行時間が超えてしまった場合には下記のようなエラーが返ってくる。

Error running query: Query execution was interrupted, maximum statement execution time exceeded

手軽に使えるので、とりあえず検証用とかでクエリを流したい場合なんかに活用できそう。

参考

gihyo.jp