Spec-Zone.ru › MariaDB

Таймауты транзакций

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
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется 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/transaction-timeouts/

Spec-Zone.ru

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