Прерывание заявок, превышающих определённое время выполнения
Обзор
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 не работает для заявок 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....
См. также
© 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/