Как установить InnoDB в MySQL на уровень изоляции снимка

Сейчас я работаю над школьным проектом, который должен характеризовать производительность MySQL с точки зрения разных уровней изоляции. Я тестировал вещи на READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ и SERIALIZABLE. Теперь я хотел бы проверить вещи, используя изоляцию снимка.

Я понимаю, что при использовании значения по умолчанию для REPEATABLE READ в InnoDB изоляция моментального снимка используется совместно, но мне интересно, возможно ли установить уровень изоляции только для изоляции моментального снимка? Как бы я это сделал?

3 ответа

Не существует глобального уровня изоляции снимков. Из документов MySQL, START TRANSACTION синтаксис:

Вы также можете начать транзакцию следующим образом:

START TRANSACTION WITH CONSISTENT SNAPSHOT;

WITH CONSISTENT SNAPSHOT опция запускает согласованное чтение для механизмов хранения, которые способны на это. Это относится только к InnoDB. Эффект такой же, как выдача START TRANSACTION с последующим SELECT из любой таблицы InnoDB. См. Раздел 13.6.8.2, "Согласованные считывания без блокировки". WITH CONSISTENT SNAPSHOT Параметр не изменяет текущий уровень изоляции транзакции, поэтому он обеспечивает согласованный снимок только в том случае, если текущий уровень изоляции обеспечивает согласованное чтение (REPEATABLE READ или же SERIALIZABLE).

Итак, вам придется установить уровень изоляции REPEATABLE READ или же SERIALIZABLE и начните свои транзакции с вышеуказанным синтаксисом.

Используя переменную tx_isolation, вы можете установить изоляцию транзакции локально и глобально.

Вы можете установить его в сеансе следующим образом

SET tx_isolation = 'READ-COMMITTED';

Вы можете установить это глобально, а также

SET GLOBAL tx_isolation = 'READ-COMMITTED';

но это влияет на новые соединения с БД в будущем. Вы все еще должны установить это в текущем сеансе

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

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

Изоляция моментальных снимков была принята несколькими крупными системами управления базами данных, такими как SQL Anywhere, InterBase, Firebird, Oracle, PostgreSQL и Microsoft SQL Server (2005 и более поздние версии).

В изоляции снимка,

Сама транзакция будет успешно зафиксирована, только если не было выполнено ни одного обновления, конфликтующего с любыми одновременными обновлениями, сделанными после этого снимка

Но уровень REPEATABLE READ не делает этого вообще, хотя он использует снимок.

Другие вопросы по тегам