Какой уровень изоляции транзакции MySql InnoDB мне следует использовать? - PullRequest
0 голосов
/ 12 января 2019

Я использую .NET MySqlClient v6.6.4.0 против MySql Server v5.7.19

Show table Status 

показывает, что все таблицы используют движок InnoDB

SHOW VARIABLES LIKE 'tx_isolation';

возвращает

tx_isolation    REPEATABLE-READ

Моя проблема проста.

У меня есть один процесс, который выполняет каждую минуту

Open a database connection
Begin a Transaction (using default isolation mode of RepeatableRead)
Delete all rows from a table
Insert a bunch of rows - at least 50 or 60
Commit transaction
Close connection

У меня также есть несколько отдельных процессов, которые могут запрашивать эту таблицу в любое время.

Я ожидаю, что если таблица будет запрошена во время записи в область транзакции, считыватель заблокирует ее до завершения транзакции и вернет все 50 или 60 строк.

Вместо этого я обнаружил, что читатель не блокирует и получает все, что было написано до этого момента.

Какой уровень изоляции мне нужен, чтобы считыватели блокировались во время заполнения таблицы и получали полный набор данных?

1 Ответ

0 голосов
/ 12 января 2019

Я бы не стал менять уровень изоляции транзакции из-за этого. Я бы предпочел использовать явную блокировку записи таблицы :

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

Только сеанс, который удерживает блокировку, может получить доступ к таблице. Нет другого сеанс может получить к нему доступ, пока не будет снята блокировка.

Блокировка запросов для таблицы другим блоком сеансов, пока WRITE блокировка удерживается.

Поскольку операторы таблиц блокировки и разблокировки фиксируют любую открытую транзакцию в данном сеансе, вам необходимо соблюдать осторожность при их использовании. Mysql предоставляет следующий пример в приведенной выше ссылке:

SET autocommit=0;
LOCK TABLES t1 WRITE;
... do something with table t1 here ...
COMMIT;
UNLOCK TABLES;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...