Spec-Zone.ru › MariaDB

Блокировка метаданных

MariaDB поддерживает блокировку метаданных. Это означает, что при использовании таблицы транзакцией (включая XA-транзакции) блокируются её метаданные до конца транзакции. Также блокируются нетранзакционные таблицы, а также представления и объекты, связанные с заблокированными таблицами/представлениями (хранимые функции, триггеры и т. д.). Когда соединение пытается выполнить оператор DDL (например, ALTER TABLE), изменяющий заблокированную таблицу, это соединение ставится в очередь и должно ждать, пока таблица не будет разблокирована. Использование точек сохранения и частичное откат не разблокирует метаданные.

LOCK TABLES ... WRITE также ставится в очередь. Некоторые неправильные операторы, которые вызывают ошибку, могут не ждать освобождения блокировки.

Время ожидания блокировки метаданных определяется значением системной переменной сервера lock_wait_timeout (в секундах). Однако обратите внимание, что её значение по умолчанию составляет 31536000 (1 год, MariaDB <= 10.2.3) или 86400 (1 день, MariaDB >= 10.2.4). Если это время ожидания превышено, возвращается следующая ошибка:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

Если плагин metadata_lock_info установлен, таблица Информационной схемы metadata_lock_info хранит информацию о существующих блокировках метаданных.

MariaDB начиная с 10.5.2

Начиная с MariaDB 10.5, таблица Performance Schema metadata_locks содержит информацию о блокировках метаданных.

Пример

Давайте используем следующую таблицу MEMORY (нетранзакционную):

CREATE TABLE t (a INT) ENGINE = MEMORY;

Соединение 1 начинает транзакцию и выполняет INSERT в таблицу t:

START TRANSACTION;

INSERT INTO t SET a=1;

t метаданные теперь заблокированы соединением 1. Соединение 2 пытается изменить t, но должно ждать:

ALTER TABLE t ADD COLUMN b INT;

Запрос соединения 2 заблокирован.

Теперь соединение 1 завершает транзакцию:

COMMIT;

...и соединение 2, наконец, получает результат своей команды:

Query OK, 1 row affected (35.23 sec)
Records: 1  Duplicates: 0  Warnings: 0
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется 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/metadata-locking/

Spec-Zone.ru

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