Exclusive (X)
|
No
|
No
|
No
|
No
|
No
|
Таблица 1
В таблице 1 “Yes” означает, что блокировки совместимы, то есть могут быть одновременно наложены на один и тот же объект, а “No”
означает, что не совместимы.
Протокол двухфазной блокировки
Важную роль в обеспечении корректной параллельной
обработки транзакций играет «протокол двухфазной блокировки» (Two Phase Locking
– 2PL). Существует соответствующая теорема, в которой доказывается, что если транзакция
удовлетворяет протоколу двухфазной блокировки, то она корректна, то есть
результат ее выполнения не зависит от других транзакций.
Суть 2PL в том, что нельзя снять однажды наложенную
блокировку до тех пор, пока не наложены все блокировки, необходимые транзакции.
Таким образом, работа с блокировками в транзакции делится на две фазы: фаза
наложения блокировок и фаза снятия. В практических реализациях, как правило, применяется строгий протокол двухфазной блокировки – Strict 2PL. Его
особенность в том, что фаза снятия блокировок наступает после фиксации
транзакции.
Уровни изоляции
Как уже говорилось, в идеальном случае результат
выполнения транзакции не должен зависеть от остальных транзакций, сколько бы
одновременно их не выполнялось. Но, к сожалению, этот идеальный случай
накладывает сильные ограничения на параллельную обработку, практически
выстраивая транзакции в очередь. Однако в большинстве случаев такая строгость
не нужна, и поэтому были введены так называемые «уровни изоляции» (Isolation Level), которые определяют степень параллелизма выполнения транзакций. Чем ниже уровень
изоляции, тем выше степень параллелизма и тем больше риск «неправильного»
выполнения транзакции.
В стандарте ANSI SQL вводятся четыре уровня изоляции.
И по названиям, и по поведению уровни изоляции в Microsoft SQL Server полностью
соответствуют описанным в стандарте.
В стандарте уровни изоляции привязаны к четырем
«феноменам» – нарушениям изолированности транзакций: грязная запись, грязные
чтения, неповторяющиеся чтения и фантомы. Повышение уровня изоляции
последовательно устраняет эти аномалии одну за другой. Теперь по порядку.
1. Read Uncommitted – самый низкий уровень изоляции.
Позволяет читать "грязные" данные незафиксированых транзакций, отсюда
и название феномена – «грязное чтение» (Dirty Read). Суть феномена в том, что
если первая транзакция запишет какие-то данные, вторая их прочитает, а потом
первая транзакция будет отменена, то получится, что вторая транзакция прочитала
данные, которые никогда не существовали.
2. Read Committed – при этом уровне изоляции грязное
чтение невозможно, то есть второй транзакции не дадут прочитать данные первой
до тех пор, пока первая транзакция не зафиксируется. Но при этом уровне
изоляции все еще возможна аномалия неповторяющегося чтения. Суть этого феномена
в том, что если первая транзакция один раз прочитала данные, а потом вторая их
изменила и зафиксировалась, то повторное чтение тех же данных первой
транзакцией вернет уже измененные данные.
3. Repeatable Read – этот уровень решает предыдущую
проблему, но при этом возможно появление фантомов. Изменение однажды
прочитанных первой транзакцией данных другими транзакциями (до фиксации первой)
невозможно. Однако если первая транзакция сделала выборку по какому-то условию, а потом вторая транзакция добавила новые данные, этому условию удовлетворяющие, и зафиксировалась, то повторная выборка первой транзакцией по тому же условию
вернет в том числе и добавленные данные – фантомы.
4. Serializable – при этом уровне изоляции никакие
фантомы невозможны в принципе, равно как и другие феномены, даже такие, которых
еще не придумали. Этот уровень изоляции ни на какие феномены не опирается, просто требуется, чтобы результат параллельного выполнения транзакций был таким
же, как если бы они выполнялись последовательно.
Особенности Microsoft SQL Server
Ввиду того, что все практические эксперименты будут
проводиться на Microsoft SQL Server 2000, необходимо также описать некоторые
особенности внутренней механики этого сервера.
Для работы с блокировками сервер идентифицирует каждый
объект. Для этого используются идентификаторы ресурса (Resource) и объекта
(ObjId). Для разных типов объектов эти идентификаторы отличаются. Нас будут
интересовать следующие объекты:
TAB – таблица. Идентификатор объекта "целое число", например 26173590. Поскольку таблица – объект чисто логический, идентификатора
ресурса она не имеет.
PAG – страница данных. Виртуальная страница данных
принадлежит конкретной таблице, поэтому идентификатор объекта совпадает с
идентификатором таблицы, данные которой размещены на этой странице. В то же
время страница имеет физический эквивалент – страницу данных в файле, поэтому
имеется также идентификатор ресурса. Он представляет собой комбинацию
идентификатора файла данных (fileId) и номера страницы внутри файла (pageId), например, 1: 1723
RID – запись. Виртуальная запись принадлежит странице, поэтому так же, как и в случае со страницей, ObjId совпадает со страничным и, соответственно, табличным идентификаторами. Физический эквивалент также
присутствует – это слот в странице данных, соответственно, есть и идентификатор
ресурса, который состоит из идентификатора файла данных, идентификатора
страницы данных и, наконец, идентификатора записи внутри страницы. Например, 1:1723:2
Рекомендуем скачать другие рефераты по теме: урок изложение, диплом разработка.
Предыдущая страница реферата |
1
2
3
4
5
6
7
8
9
10
11 |
Следующая страница реферата