Spec-Zone.ru › MariaDB

Прерывание заявок, превышающих определённое время выполнения

Обзор

MariaDB 10.1.1 ввела системную переменную max_statement_time. При значении, отличном от нуля, все запросы, выполняющиеся дольше указанного времени в секундах, будут прерваны. По умолчанию значение равно нулю, и ограничения не применяются. Прерванный запрос не влияет на контексты больших транзакций или соединений. Переменная имеет тип double, поэтому вы можете использовать таймаут с дробной частью секунды. Например, вы можете использовать значение 0,01 для таймаута в 10 миллисекунд.

Значение может быть установлено глобально или на сеанс, а также на пользователя или на запрос (см. ниже). Рабы не затрагиваются этой переменной.

Связанная переменная состояния max_statement_time_exceeded хранит количество запросов, которые превысили время выполнения, указанное переменной max_statement_time, и столбец MAX_STATEMENT_TIME_EXCEEDED был добавлен в таблицы схемы информации CLIENT_STATISTICS и USER STATISTICS.

Функция была основана на патче от Davi Arnaut.

Пользовательская max_statement_time

max_statement_time может быть хранится на уровне пользователя с помощью синтаксиса GRANT ... MAX_STATEMENT_TIME.

Для каждого запроса max_statement_time

Используя max_statement_time в сочетании с SET STATEMENT, можно ограничить время выполнения отдельных запросов. Например:

SET STATEMENT max_statement_time=100 FOR 
  SELECT field1 FROM table_name ORDER BY field1;

max_statement_time для каждого запроса Отдельные запросы также могут быть ограничены путём добавления MAX_STATEMENT_TIME к запросу. Например:

SELECT MAX_STATEMENT_TIME=2 * FROM t1;

Ограничения

  • max_statement_time не работает в встраиваемых серверах.
  • max_statement_time не работает для заявок COMMIT в кластере Galera (см. MDEV-18673 для обсуждения).

Отличия между реализациями MariaDB и MySQL

MySQL 5.7.4 представил аналогичную функциональность, но реализация MariaDB отличается по нескольким аспектам.

  • Версия max_statement_time в MySQL (max_execution_time) определена в миллисекундах, а не в секундах.
  • Реализация MySQL может убивать только SELECT-запросы, в то время как MariaDB может убивать любые запросы (исключая хранимые процедуры).
  • MariaDB ввела только переменную состояния max_statement_time_exceeded, в то время как MySQL также ввела ряд других переменных, которые не считались необходимыми в MariaDB.
  • Синтаксис SELECT MAX_STATEMENT_TIME = N ... недействителен в MariaDB. В MariaDB следует использовать SET STATEMENT MAX_STATEMENT_TIME=N FOR....

См. также

  • Ограничения и таймауты запросов
  • Переменная lock_wait_timeout
Контент, воспроизведённый на этом сайте, является собственностью соответствующих владельцев, и этот контент не проходит предварительную проверку со стороны MariaDB. Мнения, информация и мнения, выраженные в этом контенте, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/aborting-statements-that-take-longer-than-a-certain-time-to-execute/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API