MySQL. Могу ли я ограничить максимально допустимое время выполнения запроса?
Я ищу способ ограничить максимальное время выполнения запроса на сервере mysql. Я понял, что это можно сделать с помощью конфигурационного файла my.cnf
, но не может найти что-либо в документах. Кто-нибудь знает, можно ли это сделать? спасибо.
Ответы
Ответ 1
Невозможно указать максимальное время выполнения при отправке запроса на сервер для запуска.
Однако, не редкость иметь задание cron, которое выполняется каждую секунду на сервере базы данных, подключая и делая что-то вроде этого:
- SHOW PROCESSLIST
- Найти все соединения с временем запроса, превышающим максимально возможное время.
- Запустите KILL [идентификатор процесса] для каждого из этих процессов.
Ответ 2
Тем временем команда 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-Timeout
Ответ 3
Вы можете использовать запрос следующим образом:
SELECT MAX_STATEMENT_TIME=1000 * FROM table;
UPDATE:
Вы должны использовать max_execution_time.
SELECT /*+ MAX_EXECUTION_TIME(1000)*/ * FROM table;
MAX_STATEMENT_TIME было переименовано в max_execution_time в MySQL 5.7.8.
http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_execution_time
Ответ 4
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;