Aborting Statements that Exceed a Certain Time to Execute
MariaDB starting with 10.1.1
MariaDB 10.1.1 introduced the
max_statement_time system variable. When set to a non-zero value, any queries taking longer than this time in seconds will be aborted. The default is zero, and no limits are then applied. The aborted query has no effect on any larger transaction or connection contexts. The variable is of type double, thus you can use subsecond timeout. For example you can use value 0.01 for 10 milliseconds timeout.
The value can be set globally or per session, as well as per user or per query (see below). Slave's are not affected by this variable.
An associated status variable,
max_statement_time_exceeded, stores the number of queries that have exceeded the execution time specified by
max_statement_time, and a
MAX_STATEMENT_TIME_EXCEEDED column was added to the
USER STATISTICS Information Schema tables.
The feature was based upon a patch by Davi Arnaut.
MariaDB starting with 10.1.2
SET STATEMENT max_statement_time=100 FOR SELECT field1 FROM table_name ORDER BY field1;
- max_statement_time does not work in embedded servers.
- max_statement_time does not work for COMMIT statements in a Galera cluster (see MDEV-18673 for discussion).
Differences Between the MariaDB and MySQL Implementations
MySQL 5.7.4 introduced similar functionality, but the MariaDB implementation differs in a number of ways.
- The MySQL version of
max_statement_timeis defined in millseconds, not seconds
- MySQL's implementation can only kill SELECTs, while MariaDB's can kill any queries (excluding stored procedures).
- MariaDB only introduced the
max_statement_time_exceededstatus variable, while MySQL also introduced a number of other variables which were not seen as necessary in MariaDB.
SELECT MAX_STATEMENT_TIME = N ...syntax is not valid in MariaDB.