MySQL - могу ли я ограничить максимальное время выполнения запроса? - PullRequest
15 голосов
/ 25 января 2011

Я ищу способ ограничить максимальное время выполнения запроса на сервере MySQL.Я подумал, что это можно сделать с помощью файла конфигурации my.cnf, но не смог найти ничего подходящего в документации.Кто-нибудь знает, можно ли это сделать?спасибо.

Ответы [ 4 ]

14 голосов
/ 25 января 2011

Невозможно указать максимальное время выполнения при отправке запроса на сервер для запуска.

Однако, нередко иметь задачу cron, которая запускается каждую секунду на сервере базы данных, подключаясь и делая что-то вроде этого:

  1. ПОКАЗАТЬ ПРОЦЕСС
  2. Найти все соединения с временем запроса, превышающим максимальное требуемое время
  3. Запустите KILL [идентификатор процесса] для каждого из этих процессов
8 голосов
/ 18 февраля 2016

Вы можете использовать запрос следующим образом:

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

4 голосов
/ 06 мая 2012

Тем временем команда 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

2 голосов
/ 01 декабря 2016

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;
...