Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




Блокировки снижают возможности параллельного выполнения транзакций и приводят к появлению тупиков, поэтому в стандарте языка SQL предложены 4 уровня изоляции транзакций. Выбирая уровень изоляции транзакций, разработчик БД может повлиять на логику работы блокировок. В зависимости от выбранного уровня изоляции транзакций допускается или исключается появление в БД следующих ситуаций:

(i) dirty read — «грязное» чтение, данная ситуация возникает, когда транзакция читает незафиксированные данные, измененные другой транзакцией:

Момент времени Транзакция А Транзакция B
t1 —————— begin transaction ————————————
t2 —————— ———————————— begin transaction
t3 —————— update Счет set Сумма = Сумма - 100 where Номер = 777 ————————————
t4 —————— ———————————— select sum(Сумма) from Счет where Номер < 1000
t5 —————— ———————————— commit transaction
t6 —————— rollback transaction ————————————

Рис. 7

Как следует из рис. 7 транзакция B, получила значение суммы, не соответствующее состоянию БД.

(ii) non-repeatable read — неповторяемое чтение, данная ситуация возникает, когда транзакция дважды читает данные и получает различные значения из-за изменений, сделанных другой транзакцией:

Момент времени Транзакция А Транзакция B
t1 —————— begin transaction ————————————
t2 —————— ———————————— begin transaction
t3 —————— select Сумма from Счет where Номер = 777 ————————————
t4 —————— ———————————— update Счет set Сумма = Сумма - 100 where Номер = 777
t5 —————— ———————————— commit transaction
t6 —————— select Сумма from Счет where Номер = 777 ————————————
t6 —————— commit transaction ————————————

Рис. 8

Как следует из рис. 8, транзакция A дважды выполняя один и тот же запрос, получает различные результаты.

(iii) phantom rows — фантомные строки, данная ситуация возникает, когда одна транзакция отбирает набор данных запросом по некоторому условию, вторая транзакция добавляет, удаляет или изменяет данные, так что строки перестают или начинают удовлетворять условию запроса, после чего первая транзакция повторяет запрос и получает другой набор данных:

Момент времени Транзакция А Транзакция B
t1 —————— begin transaction ————————————
t2 —————— ———————————— begin transaction
t3 —————— select * from Счет where Номер < 1000 ————————————
t4 —————— ———————————— insert into Счет values (999, ‘Сыроежкин’, 200)
t5 —————— ———————————— commit transaction
t6 —————— select * from Счет where Номер < 1000 ————————————
t6 —————— commit transaction ————————————

Рис. 9

Как следует из рис. 9, транзакция A дважды выполняя один и тот же запрос, получит различные наборы данных. Случаи (ii) и (iii) могут показаться похожими, основное отличие в том, что в (ii) речь идет о стабильности отдельных строк, а в (iii) — наборов строк (диапазонов).

Исключить появление рассмотренных ситуаций в БД можно, изменяя уровни изоляции транзакций:

Таблица 2

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

Номер Наименование dirty read non-repeatable read phantom rows
  read uncommitted Да Да Да
  read committed Нет Да Да
  repeatable read Нет Нет Да
  serializable Нет Нет Нет

 

Как следует из таблицы 2, на самом низком уровне изоляции (read committed) проявляются все рассмотренные выше ситуации, повышение уровня изоляции последовательно приводит к их исключению. На самом высоком уровне изоляции (serializable) транзакции выполняются так, как если бы работа с БД происходила последовательно. Низкие уровни изоляции транзакций снижают вероятность возникновения тупиков и повышают параллелизм, так как на этих уровнях СУБД изменяет логику работы блокировок, отступая от рассмотренной в п. 2 ().

Установку текущего уровня изоляции транзакций осуществляет директива set transaction isolation level { read committed | read uncommitted | repeatable read | serializable [18] }. Установленный уровень изоляции транзакций действует до конца сеанса или до тех пор, пока не будет изменен другой директивой set transaction isolation level. Получить значение текущего уровня изоляции транзакций можно, или выполнив директиву dbcc useroptions (MS SQL) или опросив глобальную системную переменную @@isolation (в MS SQL не поддерживается).

Задать уровень изоляции для отдельного запроса или таблицы, не изменяя уровень изоляции, установленный для сеанса, можно с помощью табличных подсказок — hints (http://msdn.microsoft.com/ru-ru/library/ms187373%28SQL.105%29.aspx)[19].




Поделиться с друзьями:


Дата добавления: 2015-05-09; Просмотров: 455; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.