Как установить 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 не делает этого вообще, хотя он использует снимок.