Как установить InnoDB в MySQL на уровень изоляции снимка - PullRequest
4 голосов
/ 27 марта 2012

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

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

Ответы [ 3 ]

5 голосов
/ 27 марта 2012

Глобальный уровень изоляции моментальных снимков отсутствует.Из документов 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 и начать транзакции с вышеуказанным синтаксисом.

1 голос
/ 27 марта 2012

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

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

SET tx_isolation = 'READ-COMMITTED';

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

SET GLOBAL tx_isolation = 'READ-COMMITTED';

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

0 голосов
/ 26 мая 2015

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

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

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

В изоляции моментального снимка,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...