Управление уровнями изоляции транзакций в MySQL.

Установка уровня изоляции транзакций в MySQL.

В MySQL установить уровень изоляции транзакций можно двумя способами:

1. На уровне сервера при его запуске. Это делается либо с помощью опции –transaction-isolation=<isolation_level_name>, либо установкой переменной transaction-isolation в конфигурационном файле в секции [mysqld].

2. На уже запущенном сервере с помощью команды SET TRANSACTION ISOLATION LEVEL. Возможный синтаксис данной команды представлен в примере ниже:

SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level_name>;
SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level_name>;
SET TRANSACTION ISOLATION LEVEL <isolation_level_name>;

<isolation_level_name> при установке в конфигурационном файле или в командной строке при запуске сервера может иметь значения: READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ и SERIALIZABLE.

При использовании команды SET TRANSACTION ISOLATION LEVEL значение <isolation_level_name> может быть следующее: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Обратите внимание на их разное написание, в одном случае используется ‘-‘, в другом нет.

Уровень изоляции транзакций может быть установлен на уровне сервера (как глобальная переменная) и на уровне сессии. Если нет явного указания (GLOBAL или SESSION), то по умолчанию подразумевается уровень сессии, т.е. следующие две команды будут эквивалентны:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

Для того, чтобы установить значение этой переменной на уровне сервера, надо явно указать слово GLOBAL:

SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

Напомню, что в этом случае установленное значение по умолчанию будет действовать только для новых подключений к серверу. Для всех пользователей, которые уже работали с сервером, ничего не изменится.

Клиент всегда может изменить уровень изоляции транзакций в своей сессии, изменение уровня изоляции транзакций на уровне сервера (GLOBAL) требует наличие привилегий SUPER.

Для того, чтобы посмотреть текущий уровень изоляции транзакций существует переменная tx_isolation. Эта переменная может использоваться с префиксами global или session. Отсутствие префикса эквивалентно значению session. Значение переменных global.tx_isolation и session.tx_isolation может отличаться.

Переменная tx_isolation

Переменная tx_isolation

 

Leave a Reply

Your email address will not be published. Required fields are marked *