Тема_9 (1122360), страница 5
Текст из файла (страница 5)
Базы данных68УправлениМетоды сериализации транзакций (33)Синхронизационные блокировки (28)Гранулированные синхронизационные блокировки (16)Блокировка объекта o врежиме SIX в транзакции T1позволяет этой транзакции читать любой объект o', входящий в o,без его дополнительной блокировки и изменять любой объект o', входящийв o, с его предварительнойблокировкой в режиме XЭта блокировка совместима с блокировкой объекта o врежиме IS в транзакции T2Действительно, блокировка объекта o в режиме IS втранзакции T2 направлена на то, чтобы в транзакции T2читать какой-либо объект o', входящий в oПеред этим в транзакции T2 должна быть установленаблокировка объекта o' в режиме S03.12.2009С.Д.Кузнецов.
Базы данных69УправлениМетоды сериализации транзакций (34)Синхронизационные блокировки (29)Гранулированные синхронизационные блокировки (17)К этому моменту у объекта o' можетотсутствовать явная блокировка,установленная в транзакции T1, что,в соответствии с семантикойблокировки SIX, означает наличиенеявной блокировки o' по чтениюОчевидно, что в этом случае конфликттранзакций T1 и T2 не возникаетК этому же моменту у объекта o' может иметься блокировкав режиме X, установленная в транзакции T1В этом случае запрос блокировки объекта o' в режиме Sудовлетворен не будет, и конфликт транзакций T1 и T2 видаW/R будет предотвращен без потребности внесовместимости блокировок SIX и IS03.12.2009С.Д.Кузнецов.
Базы данных70УправлениМетоды сериализации транзакций (35)Синхронизационные блокировки (30)Гранулированные синхронизационные блокировки (18)Блокировка объекта o врежиме SIX в транзакции T1не совместима с блокировкойобъекта o в режиме X втранзакции T2,Блокировка объекта o в режиме SIX втранзакции T1 не совместима с блокировкой объекта o в режиме Sили IS в транзакции T2поскольку иначе мог быпроявиться конфликт транзакцийT1 и T2 вида R/Wпоскольку иначе мог бы проявиться конфликт транзакций T1 и T2 видаW/R при доступе к некоторым объектам o', входящим в oНаконец, блокировка объекта o в режиме SIX в транзакции T1 несовместима с блокировкой объекта o в режиме IX или SIX втранзакции T2,поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 видаR/W при доступе к некоторым объектам o', входящим в o03.12.2009С.Д.Кузнецов.
Базы данных71УправлениМетоды сериализации транзакций (36)Синхронизационные блокировки (31)Предикатные синхронизационные блокировки (1)Несмотря на привлекательность метода гранулированныхсинхронизационных захватов, следует отметить, что он не решаетпроблему фантомовДавно известно, что для решения этой проблемы необходимоперейти от блокировокусловий (предикатов), которым удовлетворяют эти объектыПроблема фантомов не возникает при использовании дляблокировок уровня таблиц именно потому, что таблица каклогический объектиндивидуальных («физических») объектов базы данных,к блокировкеесли, конечно, не ограничиться использованием блокировок таблиц врежимах S и Xпредставляет собой неявное условие для входящих в него кортежейБлокировка таблицы – это простой и частный случай предикатнойблокировки03.12.2009С.Д.Кузнецов.
Базы данных72УправлениМетоды сериализации транзакций (37)Синхронизационные блокировки (32)Предикатные синхронизационные блокировки (2)Поскольку любая операция над реляционной базой данныхзадается некоторым условием т.е. в ней указывается не конкретный набор объектов базыданных, над которыми нужно выполнить операцию, аусловие, которому должны удовлетворять объекты этогонабора,идеальным выбором было бы требовать синхронизационнуюблокировку в режиме S или X именно этого условияНо если посмотреть на общий вид условий, допускаемых,например, в языке SQL, то становится абсолютно непонятно, как определить совместимость двух предикатных блокировокЯсно, что без этого использовать предикатные блокировкидля сериализации транзакций невозможно, а в общей формепроблема неразрешима03.12.2009С.Д.Кузнецов.
Базы данных73УправлениМетоды сериализации транзакций (38)Синхронизационные блокировки (33)Предикатные синхронизационные блокировки (3)Один из компромиссных подходов предлагался участникамипроекта System RПодход основывался на том, что при открытии сканированиятаблицы по индексу в RSS передается дополнительнаяинформациядиапазон сканирования,которая ограничивает множество кортежей, среди которых недолжны возникать фантомы.Опираясь на наличие этой информации, предлагалось ввести всистему блокировок System R элементы предикатных блокировокВ System R блокировки сегментов (файлов), таблиц и кортежейтехнически трактовались единообразно, как блокировкиидентификаторов кортежей (tid'ов)При блокировке кортежа на самом деле блокировался его tidПри блокировке сегмента или таблицы на самом деле блокировался tidописателя соответствующего объекта во внутренних таблицахкаталогах сегментов или таблиц03.12.2009С.Д.Кузнецов. Базы данных74УправлениМетоды сериализации транзакций (39)Синхронизационные блокировки (34)Предикатные синхронизационные блокировки (4)Предлагалось расширить систему синхронизации, разрешив применятьблокировки к паре«идентификатор индекса, интервал значений ключа этого индекса»К такой паре можно было применять блокировки в любом из допустимыхрежимов, причем две такие блокировки считались совместимыми в том итолько в том случае, если они были совместимы в соответствии с таблицейсовместимости или указанные диапазоны значений ключей непересекались.При наличии такой возможности, если открывается сканирование таблицычерез индекс, то таблица блокируется в режиме IS, и в этом же режимеблокируется пара «идентификатор индекса, диапазон сканирования»При занесении (удалении) кортежа таблица блокируется в режиме IX, и вэтом же режиме для каждого индекса, определенного на данной таблицеотношении, блокируется пара «идентификатор индекса, значение ключа иззатрагиваемого операцией кортежа»Это позволяет избежать конфликтов читающих транзакций с темиизменяющими транзакциями, которые затрагивают диапазонысканирования читающих транзакций03.12.2009С.Д.Кузнецов.
Базы данных75УправлениМетоды сериализации транзакций (40)Синхронизационные блокировки (35)Предикатные синхронизационные блокировки (5)При этом решается проблема фантомов, и параллельностьтранзакций ограничивается «по существу», т.е. только в техслучаях, когда их параллельное выполнение создаетпроблемыОднако описанное решение проблемы фантомов далеко отидеальногоВо-первых, по-прежнему при сканировании таблиц безиспользования индексов отсутствие фантомов можногарантировать только при блокировке всего отношения врежиме SВо-вторых, даже при сканировании по индексу условиереальной выборки кортежа часто может быть гораздо строжепростого указания диапазона сканирования, а это значит, что блокировка этого диапазона будет слишком сильной, т.е.затронет более широкое множество кортежей, чем то,которое будет реальным результатом сканирования03.12.2009С.Д.Кузнецов. Базы данных76УправлениМетоды сериализации транзакций (41)Синхронизационные блокировки (36)Предикатные синхронизационные блокировки (6)Известно следующее более совершенное решение.
Будемназывать простым условием конъюнкцию простыхпредикатов сравнения, имеющих вид имя_поля { = > < }значениеВ типичных СУБД в интерфейсе подсистемы управленияпамятью допускаются только простые условияПодсистема языкового уровня производит компиляциюоператора SQL со сложным условием в последовательностьобращений к подсистеме управления памятью, в каждом изкоторых содержатся только простые условияБолее точно, простое условие явно указывается в операцииоткрытия сканирования таблицы напрямую или через индексoв последнем случае оно конъюнктивно соединяется с условием,задаваемым диапазоном сканирования03.12.2009С.Д.Кузнецов.
Базы данных77УправлениМетоды сериализации транзакций (42)Синхронизационные блокировки (37)Предикатные синхронизационные блокировки (7)Кроме того, при открытии сканирования всегда можноуказать, для какой цели оно будет использоваться: длявыборки кортежей, для их удаления или для их обновления это известно компилятору SQLКроме того, неявные условия задаются операциями вставкии удаления кортежей конъюнктивное логическое выражение, состоящее изпростых предикатов вида имя_поля = значение для всехполей таблицы,а также операциями обновления кортежей конъюнктивное логическое выражение, состоящее изпростых предикатов вида имя_поля = значение для всехобновляемых полей таблицыПоэтому в случае типовой организации SQLориентированной СУБД простые условия можноиспользовать как основу предикатных захватов03.12.2009С.Д.Кузнецов. Базы данных78УправлениМетоды сериализации транзакций (43)Синхронизационные блокировки (38)Предикатные синхронизационные блокировки (8)Для простых условий совместимость предикатныхблокировок легко определяется на основе следующейгеометрической интерпретацииПусть Tab – таблица с полями a1, a2, ..., an, а m1, m2, ..., mn– множества допустимых значений a1, a2, ..., anсоответственно естественно, все эти множества – конечныеТогда можно сопоставить Tab конечное n-мерноепространство возможных значений кортежей TabЛегко видеть, что любое простое условие, представляющеесобой конъюнкцию простых предикатов, «вырезает» в этомпространстве k-мерный прямоугольник (k ≤ n)03.12.2009С.Д.Кузнецов.