Таймауты транзакций
MariaDB всегда имела настройки wait_timeout и interactive_timeout, которые закрывают соединения после определенного периода бездействия.
Однако по умолчанию эти настройки устанавливаются на длительный период ожидания. В ситуациях, когда транзакции могут быть начаты, но не завершены или отменены, может потребоваться более точный контроль и более короткий таймаут, чтобы избежать удержания блокировок слишком долго.
MariaDB 10.3 представила три новые переменные для обработки этой ситуации.
- idle_transaction_timeout (все транзакции)
-
idle_write_transaction_timeout (транзакции записи — называемые
idle_readwrite_transaction_timeoutдо MariaDB 10.3.2) - idle_readonly_transaction_timeout (транзакции чтения)
Эти настройки принимают значение в секундах для таймаута, закрывая соединение, если транзакции бездействуют дольше этого периода. По умолчанию все они установлены в ноль, или таймаут отсутствует.
idle_transaction_timeout влияет на все транзакции, idle_write_transaction_timeout влияет только на транзакции записи, а idle_readonly_transaction_timeout влияет только на транзакции чтения. Последние две переменные работают независимо. Однако, если любая из них установлена вместе с idle_transaction_timeout, настройки idle_write_transaction_timeout или idle_readonly_transaction_timeout будут иметь приоритет.
Примеры
SET SESSION idle_transaction_timeout=2; BEGIN; SELECT * FROM t; Empty set (0.000 sec) ## wait 3 seconds SELECT * FROM t; ERROR 2006 (HY000): MySQL server has gone away
SET SESSION idle_write_transaction_timeout=2; BEGIN; SELECT * FROM t; Empty set (0.000 sec) ## wait 3 seconds SELECT * FROM t; Empty set (0.000 sec) INSERT INTO t VALUES(1); ## wait 3 seconds SELECT * FROM t; ERROR 2006 (HY000): MySQL server has gone away
SET SESSION idle_transaction_timeout=2, SESSION idle_readonly_transaction_timeout=10; BEGIN; SELECT * FROM t; Empty set (0.000 sec) ## wait 3 seconds SELECT * FROM t; Empty set (0.000 sec) ## wait 11 seconds SELECT * FROM t; ERROR 2006 (HY000): MySQL server has gone away
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/transaction-timeouts/