SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.08.2008 11:22:54

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Уровни изоляции транзакций

Когда разбираешься с логикой работы транзакций с учетом уровней изоляции, возникает вопрос: все что описано в стандарте по 4 уровням выполняется только при условии, что вся логика использует единственный уровень изоляции? Т.е. важно знать, что получится, если работают несколько транзакций на разном уровне. Ведь уровень влияет и на то, как данная транзакция "видна" извне (т.е. публикует ли свои данные до завершения) и на то, как транзакция "видит" внешние данные (напр., создание локальной копии данных при первом обращении и работа с ней, не видя чужих изменений). Вдобавок, наверное, влияет и способ, которым данная СУБД реализует эти самые уровни. Каких правил стоит придерживаться при изменении уровней изоляции в разных модулях (блоки кода, хранимки и т.д.) ? Можно ли смешивать уровни?

Отредактированно shutdown (26.08.2008 14:07:19)

Неактивен

 

#2 02.09.2008 13:45:09

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Уровни изоляции транзакций

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

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

Неактивен

 

#3 02.09.2008 13:59:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Уровни изоляции транзакций

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

Неактивен

 

#4 02.09.2008 14:33:21

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: Уровни изоляции транзакций

Т.е. выбирая уровень, нужно исходить только из того, какие изменения, сделанные другими, МЫ хотим видеть в данной транзакции?

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

Спасибо.

Отредактированно shutdown (02.09.2008 14:33:47)

Неактивен

 

#5 02.09.2008 15:00:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Уровни изоляции транзакций

Бинарный журнал - это уже последовательность запросов на изменение данных, а не набор параллельных транзакций. По логике slave действует на уровне единственного пользователя с autocommit.

О связи с репликацией немного написано в документации: http://mysql2.mirrors-r-us.net/doc/refm … ation.html
Каждый уровень изоляции умеет взаимодействовать с бинлогом по-своему, в принципе все должно работать, но на практике много граничных случаев, как пример - эта бага (уже исправлена): http://bugs.mysql.com/bug.php?id=23051

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson