КАТЕГОРИИ: Архитектура-(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 — «грязное» чтение, данная ситуация возникает, когда транзакция читает незафиксированные данные, измененные другой транзакцией:
Рис. 7 Как следует из рис. 7 транзакция B, получила значение суммы, не соответствующее состоянию БД. (ii) non-repeatable read — неповторяемое чтение, данная ситуация возникает, когда транзакция дважды читает данные и получает различные значения из-за изменений, сделанных другой транзакцией:
Рис. 8 Как следует из рис. 8, транзакция A дважды выполняя один и тот же запрос, получает различные результаты. (iii) phantom rows — фантомные строки, данная ситуация возникает, когда одна транзакция отбирает набор данных запросом по некоторому условию, вторая транзакция добавляет, удаляет или изменяет данные, так что строки перестают или начинают удовлетворять условию запроса, после чего первая транзакция повторяет запрос и получает другой набор данных:
Рис. 9 Как следует из рис. 9, транзакция A дважды выполняя один и тот же запрос, получит различные наборы данных. Случаи (ii) и (iii) могут показаться похожими, основное отличие в том, что в (ii) речь идет о стабильности отдельных строк, а в (iii) — наборов строк (диапазонов). Исключить появление рассмотренных ситуаций в БД можно, изменяя уровни изоляции транзакций: Таблица 2 Уровни изоляции транзакций
Как следует из таблицы 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; Просмотров: 491; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |