Я ищу способ ограничить максимальное время выполнения запроса на сервере mysql. Я подумал, что это можно сделать с помощью файла конфигурации my.cnf
, но не смог найти ничего подходящего в документации. Кто-нибудь знает, можно ли это сделать? Благодарю.
MySQL — могу ли я ограничить максимальное время выполнения запроса?
Ответы (4)
Update
Начиная с MySQL 5.7, вы можете включить MAX_EXECUTION_TIME
подсказка оптимизатора в ваших SELECT
запросах, чтобы указать серверу завершить его по истечении указанного времени.
Насколько я знаю, если вы хотите установить тайм-аут для всего сервера или если вас интересуют запросы помимо SELECT
s, исходный ответ по-прежнему остается вашим единственным вариантом.
Original answer
Невозможно указать максимальное время выполнения при отправке запроса на сервер для выполнения.
Однако нередко бывает, что задание cron запускается каждую секунду на вашем сервере базы данных, подключаясь и делая что-то вроде этого:
- ПОКАЗАТЬ СПИСОК ПРОЦЕССОВ
- Найдите все соединения со временем запроса, превышающим максимально желаемое время.
- Запустите KILL [идентификатор процесса] для каждого из этих процессов.
max_execution_time
.
- person nlta; 22.07.2021
Вы можете использовать запрос следующим образом:
SELECT MAX_STATEMENT_TIME=1000 * FROM table;
ОБНОВЛЕНИЕ: вместо этого следует использовать 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
Тем временем команда 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
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;