Принципы построения и работы баз данных Тема 09: Управление параллельным доступом Принципы построения БД Тема 9 1 Параллельный доступ (разделение данных) T1 T2 … Tn БД (ограничения целостности) Принципы построения БД Тема 9 2 Пример: T1: Read(A) A A+100 Write(A) Read(B) B B+100 Write(B) T2: Read(A) A A2 Write(A) Read(B) B B2 Write(B) Ограничение: A=B Принципы построения БД Тема 9 3 График (расписание) A T1 Read(A); A A+100 Write(A); Read(B); B B+100; Write(B); T2 A 25 125 Read(A);A A2; Write(A); Read(B);B B2; Write(B); 125 250 250 Принципы построения БД B 25 Тема 9 250 250 4 График B T1 T2 Read(A);A A2; Write(A); Read(B);B B2; Write(B); Read(A); A A+100 Write(A); Read(B); B B+100; Write(B); A 25 50 50 150 150 Принципы построения БД B 25 Тема 9 150 150 5 График C T1 Read(A); A A+100 Write(A); T2 Read(A);A A2; Write(A); Read(B); B B+100; Write(B); A 25 125 250 125 Read(B);B B2; Write(B); 250 Принципы построения БД Тема 9 B 25 250 250 6 График D T1 Read(A); A A+100 Write(A); T2 Read(A);A A2; Write(A); Read(B);B B2; Write(B); A 25 125 250 50 Read(B); B B+100; Write(B); 250 Принципы построения БД Тема 9 B 25 150 150 7 График E T1 Read(A); A A+100 Write(A); То же, что и график D но с новой транзакцией T2’ T2’ Read(A);A A1; Write(A); Read(B);B B1; Write(B); A 25 125 125 25 Read(B); B B+100; Write(B); 125 Принципы построения БД Тема 9 B 25 125 125 8 • Мы хотим «хорошие графики», не зависящие от – Начального состояния и – Семантики (смысла) транзакции • Достаточно рассмотреть порядок операторов read и write Пример: Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B) Sc’=r1(A)w1(A)r1(B)w1(B)r2(A)w2(A)r2(B)w2(B) T1 T2 упорядоченный график, действия Т1 и Т2 не перекрываются Принципы построения БД Тема 9 9 Однако, для Sd: Sd=r1(A)w1(A)r2(A)w2(A) r2(B)w2(B)r1(B)w1(B) • На самом деле,T2 должна предшествовать T1 в любом эквивалентном расписании, т.е. T2 T1 • С другой стороны, если смотреть на изменение А, то T1 должна предшествовать T2, т.е. T1 T2 T1 T2 Принципы построения БД Sd не может быть преобразовано в упорядоченный график Sd не эквивалентно никакому упорядоченному графику Sd - «плохой» график Тема 9 10 Вернемся к Sc Sc=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B) T1 T2 T1 T2 циклов нет Sc “эквивалентно” упорядоченному расписанию (в данном случае T1,T2) Принципы построения БД Тема 9 11 Идеи Транзакция: последовательность действий ri(x), wi(x) Конфликтующие действия: r1(A) w2(A) w1(A) w2(A) r1(A) w2(A) График: представляет хронологический порядок выполнения действий Упорядоченный график: действия транзакций не перекрываются (для любой пары транзакций одна из них должна быть полностью завершена до того, как начнет выполняться другая) Принципы построения БД Тема 9 12 Возможны ли параллельные действия? T1 выдает read(x,t) Система выдает input(x) Input(x) завершен tx время T2 выдает input(b) Система write(b,s) завершен Система выдает выдает output(b) bs output(b) input(b) завершен Следовательно, в результате имеем • S=…r1(x)…w2(b)… либо • S=…w2(b)…r1(x)… Принципы построения БД Тема 9 13 Что происходит в параллельными конфликтующими действиями над одним и тем же объектом? начало r1(A) начало w2(A) конец r1(A) конец w2(A) время • Предполагается, что действия эквивалентны либо r1(A) w2(A), либо w2(A) r1(A) • Низкоуровневый механизм синхронизации • Предполагается, что действия могут быть представлены в виде той или иной последовательности “атомарных действий” Принципы построения БД Тема 9 14 Определение S1, S2 называются конфликтно-эквивалентными графиками, если S1 может быть преобразовано в S2 последовательность перестановок не конфликтующих действий. График называется конфликтно-упорядочиваемым, если он конфликтно-эквивалентен некоторому упорядоченному графику. Принципы построения БД Тема 9 15 Граф предшествования P(S) (S - график) Вершины: транзакции в S Дуги: провести Ti Tj когда - pi(A), qj(A) – действия в S - pi(A) <S qj(A) - по крайней мере одно из действий - write • Каков будет P(S) для S = w3(A) w2(C) r1(A) w1(B) r1(C) w2(A) r4(A) w4(D) • Является ли S конфликтно-упорядочиваемым? Принципы построения БД Тема 9 16 Лемма Если S1, S2 конфликтно-эквивалентны, то P(S1)=P(S2) Доказательство: Предположим противное, т.е.что P(S1) P(S2) Ti: Ti Tj принадлежит S1 и не принадлежит S2 S1 = …pi(A)... qj(A)… pi, qj образуют S2 = …qj(A)…pi(A)... конфликт S1, S2 не являются конфликтно-эквивалентными Замечание: из P(S1)=P(S2) не следует, что S1, S2 конфликтно-эквивалентны, контрпример S1=w1(A) r2(A) w2(B) r1(B) S2=r2(A) w1(A) r1(B) w2(B) Принципы построения БД Тема 9 17 Теорема Граф P(S1) ацикличен график S1 является конфликтно-упорядочиваемым () Предположим, что S1 - конфликтно-упорядочиваем Ss: Ss, S1 конфликтно-эквивалентны P(Ss) = P(S1) P(S1) ацикличен, поскольку ацикличен P(Ss). () Пусть P(S1) ацикличен. Преобразуем график S1: (1) В качестве T1 возьмем транзакцию без входящих дуг (2) Перенесем все действия T1 в начало S1 = ……. qj(A)…….p1(A)….. T1 T2 T3 (3) Теперь S1’ = < действия T1 ><остальное> T4 (4) Повторить шаги (1)-(3) для упорядочения остального! Принципы построения БД Тема 9 18 Как обеспечить упорядочиваемость графиков? Одна возможность: в процессе работы система, записать протокол ее работы и построить граф предшествования P(S); если P(S) не содержит циклов, то график был «хорошим» Другая возможность 2: предотвращать появление циклов в графе P(S) Т1 Т2 ... Тn Диспетчер БД Принципы построения БД Тема 9 19 Протокол блокировки Два новых действия: заблокировать (исключительно): li (A) разблокировать: ui (A) T1 T2 диспетчер Таблица блокировок правило #1: правильные транзакции Ti: … li(A) … pi(A) … ui(A) ... правило #2: задача диспетчера обеспечить S = …….. li(A) ………... ui(A) ……... нет lj(A) Принципы построения БД Тема 9 20 Упражнение: • Какие графики правильные? Какие транзакции правильные? S1 = l1(A)l1(B)r1(A)w1(B)l2(B)u1(A)u1(B) r2(B)w2(B)u2(B)l3(B)r3(B)u3(B) S2 = l1(A)r1(A)w1(B)u1(A)u1(B) l2(B)r2(B)w2(B)l3(B)r3(B)u3(B) S3 = l1(A)r1(A)u1(A)l1(B)w1(B)u1(B) l2(B)r2(B)w2(B)u2(B)l3(B)r3(B)u3(B) Принципы построения БД Тема 9 21 График F T1 l1(A);Read(A) A A+100;Write(A);u1(A) T2 l2(A);Read(A) A Ax2;Write(A);u2(A) l2(B);Read(B) B Bx2;Write(B);u2(B) l1(B);Read(B) B B+100;Write(B);u1(B) Принципы построения БД Тема 9 22 График F A B T1 l1(A);Read(A) A A+100;Write(A);u1(A) T2 25 25 125 l2(A);Read(A) A Ax2;Write(A);u2(A) 250 l2(B);Read(B) B Bx2;Write(B);u2(B) 50 l1(B);Read(B) B B+100;Write(B);u1(B) Принципы построения БД 150 250 150 Тема 9 23 Правило #3 Двухфазная блокировка(2PL) Ti = ……. li(A) ………... ui(A) ……... Нет ui(*) Нет li(*) # блок. для Ti время Фаза роста Принципы построения БД Фаза сжатия Тема 9 24 График G T1 l1(A);Read(A) A A+100;Write(A) l1(B); u1(A) T2 задержано l2(A);Read(A) A Ax2;Write(A);l2(B) Принципы построения БД Тема 9 25 График G T1 l1(A);Read(A) A A+100;Write(A) l1(B); u1(A) T2 задержано l2(A);Read(A) A Ax2;Write(A);l2(B) Read(B);B B+100 Write(B); u1(B) Принципы построения БД Тема 9 26 График G T1 l1(A);Read(A) A A+100;Write(A) l1(B); u1(A) T2 задержано l2(A);Read(A) A Ax2;Write(A);l2(B) Read(B);B B+100 Write(B); u1(B) l2(B); u2(A);Read(B) B Bx2;Write(B);u2(B); Принципы построения БД Тема 9 27 График H (T2 в обратном порядке) T1 l1(A); Read(A) A A+100;Write(A) l1(B) T2 l2(B);Read(B) B Bx2;Write(B) l2(A) задержано задержано Принципы построения БД Тема 9 28 • Предполагается, что транзакции, создающие тупик, отменяются – Они не имеют эффекта – Они не появляются в графике Например, график H = Следующий шаг: Показать, что правила #1,2,3 обеспечивают получение конфликтно_упорядочиваемых графиков Принципы построения БД Тема 9 29 Что считать конфликтом для li(A), ui(A): • li(A), lj(A) - конфликт • li(A), uj(A) - конфликт Замечание: не образуют конфликтов следующие примеры < ui(A), uj(A)>, < li(A), rj(A)>,... Теорема Использование правил #1,2,3 приводит к конфликтно-упорядочиваемым графикам Для помощи в доказательстве: Определение Shrink(Ti) = SH(Ti) = первая разблокировка транзакции Ti Принципы построения БД Тема 9 30 Лемма Если Ti Tj в S, то SH(Ti) <S SH(Tj) Доказательство леммы: Ti Tj означает, что S = … pi(A) … qj(A) …; p,q образуют конфликт По правилам #1,2: S = … pi(A) … ui(A) … lj(A) ... qj(A) … По правилу 3: SH(Ti) SH(Tj) Следовательно, SH(Ti) <S SH(Tj) Принципы построения БД Тема 9 31 Доказательство теоремы: (1) Предположим, что P(S) имеет цикл T1 T2 …. Tn T1 (2) По лемме: SH(T1) < SH(T2) < ... < SH(T1) (3) Противоречие доказывает, что P(S) - ацикличен (4) график S – конфликтно-упорядочиваем Принципы построения БД Тема 9 32 • В дополнение к простой двухфазной блокировке, остальные вопросы посвящены улучшению производительности и большему параллелизму. – Разделяемые блокировки – Разные уровни блокировки – Вставки, удаления и фантомы – Другие типы управления параллельным доступом Принципы построения БД Тема 9 33 Разделяемые блокировки До сих пор: S = ...l1(A) r1(A) u1(A) … l2(A) r2(A) u2(A) … На самом деле не конфликтуют Вместо этого можно ввести: S=... ls1(A) r1(A) ls2(A) r2(A) …. us1(A) us2(A) Принципы построения БД Тема 9 34 Действия, связанные с блокировкой l-ti(A): заблокировать A в режиме t (t is S or X) u-ti(A): разблокировать A в режиме t (t is S or X) Упрощение: ui(A): разблокировать любой режим введенный транзакцией Ti для атрибута A Новое правило #1 Правильные транзакции Ti =... l-S1(A) … r1(A) … u1 (A) … Ti =... l-X1(A) … w1(A) … u1 (A) … Принципы построения БД Тема 9 35 • Как быть с транзакциями, которые читают и записывают один и тот же объект? Возможность 1: Потребовать исключительную блокировку Ti = ...l-X1(A) … r1(A) ... w1(A) ... u(A) … Возможность 2: Повышение статуса (нужно читать и, возможно, писать) Ti=... l-S1(A) … r1(A) ... l-X1(A) …w1(A) ...u(A)… Можно рассматривать как требование второго блока для А, либо отмены разделяемого и требования исключительного блока Принципы построения БД Тема 9 36 Новое правило #2 Задача диспетчера - обеспечить S = ....l-Si(A) … … ui(A) … нет l-Xj(A) S = ... l-Xi(A) … … ui(A) … нет l-Xj(A) нет l-Sj(A) Матрица совместимости Функция comp S X Принципы построения БД S true false X false false Тема 9 37 Новое правило # 3 Транзакции с двухфазной блокировкой (2PL) Нет изменений, за исключением изменения статуса: (I) Если требуется больше блокировок (например, S {S, X}) – нет изменений! (II) Если блокировка отменяется с заменой на более строгую (например, разделяемая на исключительную, S X) - она разрешена на фазе роста Принципы построения БД Тема 9 38 Теорема Использование правил #1,2,3 с X/S блокировками приводит к конфликтноупорядочиваемым графикам Доказательство: подобно случаю X блокировок Детали: l-ti(A), l-rj(A) не сонфликтуют если comp(t,r)=true l-ti(A), u-rj(A) не конфликтуют если comp(t,r)=true Принципы построения БД Тема 9 39 Дополнительные типы блокировок Примеры: (1) инкрементальная блокировка (2) блокировка для обновления Пример инкрементальной блокировки Функция comp • Атомарное действие: INi(A) S X {Read(A); A A+k; Write(A)} S T F X F F • INi(A), INj(A) не конфликтуют! I F F INj(A) A=7 INi(A) +10 A=17 A=5 +2 +10 A=15 +2 INj(A) Принципы построения БД I F F T INi(A) Тема 9 40 Блокировка для обновления Общая проблема тупиков при обновлениях: T1 T2 l-S1(A) l-S2(A) l-X1(A) Comp l-X2(A) S Уже действ. X --- Тупик --блокировка U Новое требование S T F F X U F T F F F F Решение. Если транзакция Ti хочет читать A и знает, что позже возможна запись, она требует блокировки для обновления (а не разделяемой). Только в этом случае статус может быть повышен. Принципы построения БД Тема 9 41 Замечание: объект A может иметь одновременно несколько блокировок ... S1=...l-S1(A)…l-S2(A)…l-U3(A)… l-S4(A)…? l-U4(A)…? • Чтобы разрешить новую блокировку ее режим должен быть совместимым со всеми текущими блокировками Принципы построения БД Тема 9 42 Как блокировка реализуется на практике? • Каждая система имеет свои особенности (Например, может даже не обеспечивать конфликтно-упорядочиваемые графики) • Можно использовать следующий (упрощенный) подход ... (1) Не доверять транзакциям при блокировании/разблокировании (2) Сохранять все блокировки до завершения транзакции Число блок. время Принципы построения БД Тема 9 43 Ti Read(A),Write(B) диспетчер, часть I таблица блокир. l(A),Read(A),l(B),Write(B)… диспетчер, часть II Read(A),Write(B) БД Принципы построения БД Тема 9 44 если null, объект не блокирован A B C Инф. о блокир. для B Инф. о блокир. для C ... Каждый возможный объект Таблица блокировок (концептуально) Принципы построения БД Тема 9 45 Используется хэширование: ... A H A Инф. о блокир. для A ... Если объект не найден в хэш-таблице, он не блокирован Принципы построения БД Тема 9 46 Инф. о блокировках для A - пример тран. Реж. ожид.? Nxt T_link объект:A Груп.режим:U Ожидание:да Список: T1 S no T2 U no T3 X yes К другим записям Т3 Принципы построения БД Тема 9 47 Какие объекты мы блокируем? кортеж A кортеж B кортеж C Диск. блок A ... ... Диск. блок B БД БД БД Отнош. A Отнош. B ? ... Принципы построения БД Тема 9 48 • Блокирование работаеи во всех случаях, но должны ли мы блокировать большие или маленькие объекты? • Если мы блокируем большие объекты (например, отношения) – Нужно хранить и обрабатывать меньше блокировок – Меньше возможностей для параллельного доступа • Если мы блокируем маленькие объекты(например, кортежи или отдельные поля) – Нужно хранить и обрабатывать больше блокировок – Больше возможностей для параллельного доступа Принципы построения БД Тема 9 49 Можно использовать и то и другое!! Спросите любого санитара про решение... Каб. 1 Каб. 2 Каб. 3 Каб. 4 туалет холл Принципы построения БД Тема 9 50 Примеры T1(IS), T2(S) R1 t1 t2 t3 t4 T1(S) T1(IS), T2(IX) R1 t1 t2 T1(S) Принципы построения БД t3 t4 T2(IX) Тема 9 51 Пример T1(IS), T2(IX) R1 t1 t2 T1(S) Принципы построения БД t3 t4 T2(IX) Тема 9 52 Множественная детализация (многоуровневая блокировка) Comp Requestor IS IX S SIX X IS Holder IX S SIX X Принципы построения БД Тема 9 53 Множественная детализация (многоуровневая блокировка) Функция Comp Держатель Требующий IS IX S SIX X IS IX S SIX X Режим блок. родителя IS IX S SIX X Принципы построения БД T T T T F T T F F F T F T F F Доступный режим блок. потомка IS, S IS, S, IX, X, SIX [S, IS] not necessary X, IX, [SIX] none Тема 9 T F F F F F F F F F P C 54 Правила (1) Следовать функции совместимости comp (2) Вначале потребовать блокировку корня, для любого режима (3) Узел Q может быть блокирован транзакцией Ti в режиме S или IS только если родитель(Q) блокирован той же транзакцией Ti в режиме IX или IS (4) Узел Q может быть блокирован транзакцией Ti в режиме X,SIX,IX только если родитель(Q) блокирован той же транзакцией Ti в режиме IX,SIX (5) Ti использует двухфазную блокировку (6) Ti может разблокировать узел Q только если ни один из потомков Q не блокирован той же транзакцией Ti Принципы построения БД Тема 9 55 Упражнение: • Может ли T2 получить доступ к f2.2 в режиме X ? Какие блокировки будут получены T2 в результате? T1(IX) t1 T1(IX) t2 T1(X) f2.1 Принципы построения БД R1 f2.2 t4 t3 f3.1 Тема 9 f3.2 56 Упражнение: • Может ли T2 получить доступ к f2.2 в режиме X ? Какие блокировки будут получены T2 в результате? T1(IX) R1 t1 Принципы построения БД T1(X) t2 f2.1 f2.2 t4 t3 f3.1 Тема 9 f3.2 57 Упражнение: • Может ли T2 получить доступ к f3.1 в режиме X ? Какие блокировки будут получены T2 в результате? T1(IS) R1 t1 Принципы построения БД T1(S) t2 f2.1 f2.2 t4 t3 f3.1 Тема 9 f3.2 58 Упражнение: • Может ли T2 получить доступ к f2.2 в режиме S ? Какие блокировки будут получены T2 в результате? T1(SIX) R1 t1 T1(IX) t2 T1(X) f2.1 Принципы построения БД f2.2 t4 t3 f3.1 Тема 9 f3.2 59 Упражнение: • Может ли T2 получить доступ к f2.2 в режиме X ? Какие блокировки будут получены T2 в результате? T1(SIX) R1 t1 T1(IX) t2 T1(X) f2.1 Принципы построения БД f2.2 t4 t3 f3.1 Тема 9 f3.2 60 Операции вставки и удаления A ... Z a Вставка Модификация правил блокировки: (1) Получить исключительную блокировку на объект A перед удалением A (2) При вставке A транзакцией Ti, она получает исключительную блокировку на объект A Принципы построения БД Тема 9 61 Все еще есть проблемы: Фантомы Пример: отношение R (E#,name,…) ограничение: E# является ключом использовать блокировку кортежей R o1 o2 Принципы построения БД E# 55 75 Name …. Smith Jones Тема 9 62 T1: Вставить <99,Gore,…> в R T2: Вставить <99,Bush,…> в R T1 S1(o1) S1(o2) Проверить ограничение Вставить o3[99,Gore,..] T2 S2(o1) S2(o2) Проверить ограничение Вставить o4[99,Bush,..] ... ... Решение • Использовать многоуровневую блокировку R1 • Перед вставкой Q, блокировать parent(Q) в X t1 t2 Принципы построения БД Тема 9 t3 63 Вернемся к примеру T1: Вставить <99,Gore> T1 X1(R) T2: Вставить <99,Bush> T2 X2(R ) delayed Проверить ограничение Вставить <99,Gore> U(R) X2(R) Проверить ограничение Ошибка! e# = 99 уже в R! Принципы построения БД Тема 9 64 Вместо использования R, можно использовать индекс на R: Пример: R индекс 100<E#<200 индекс 0<E#<100 E#=2 E#=5 ... E#=107 E#=109 ... ... • Этот подход может быть обобщен на множественные индексы Принципы построения БД Тема 9 65 Далее • Управление параллельным доступом для древовидных структур данных • Параллельный доступ с проверкой достоверности Принципы построения БД Тема 9 66 Пример Доступ ко всем объектам происходит через корень, с помощью указателей A B T1 блок T1 блок C T1 блок D E F Можно ли разблокировать A Если он больше не нужен? Принципы построения БД Тема 9 67 Идея: обход с использованием “Обезьяньей лестницы” A T1 блок T1 блок B T1 блок C T1 блок D E Принципы построения БД Тема 9 F 68 Почему это работает? • Предположим, все Ti начинаются с корня; требуя исключительной блокировки • Ti Tj Ti блокирует корень раньше Tj Root Q Ti Tj • Работает даже если не всегда начинаем с корня Принципы построения БД Тема 9 69 Правила: древовидный протокол (исключительные блокировки) (1) Первая блокировка Ti может быть для любого элемента (2) После этого, элемент Q может быть блокирован транзакцией Ti только если parent(Q) блокирован это транзакцией (3) Элементы могут быть разблокированы в любой момент (4) После того как Ti разблокировала Q, она не может его вновь заблокировать Принципы построения БД Тема 9 70 • Древовидный протокол обычно используется для параллельного доступа к B-tree корень Например, во время вставки родитель не разблокируется до тех пор, пока не будет ясно, что потомок не будет расщеплен Принципы построения БД Тема 9 71 Проверка достоверности Транзакции имеют 3 фазы: (1) Чтение – Все нужные значения БД прочитаны в рабочую (временную) память – Нет блокировок (2) Проверка достоверности – Проверить, что до сих пор график является упорядочиваемым (3) Запись – Если проверка была успешной, записать в БД Принципы построения БД Тема 9 72 Ключевая идея • Сделать проверку атомарной • Если T1, T2, T3, … порядок, для которого происходит проверка, то результирующий график будет конфликтно-эквивалентным графику Ss = T1 T2 T3... Для реализации проверки достоверности система поддерживает два множества: • FIN = транзакции, завершившие фазу 3 (следовательно – полностью завершенные) • VAL = транзакции, успешно завершившие фазу 2 (проверку достоверности) Принципы построения БД Тема 9 73 Пример того, что должна предотвращать проверка: RS(T2)={B} WS(T2)={B,D} T2 начало T3 начало RS(T3)={A,B} = WS(T3)={C} T2 T3 проверена проверена время Принципы построения БД Тема 9 74 разрешать Пример того, что должна предотвращать проверка: RS(T2)={B} WS(T2)={B,D} T2 начало T3 начало RS(T3)={A,B} WS(T3)={C} T2 T3 проверена проверена T2 закончила фазу 3 Принципы построения БД = Тема 9 T3 начало время 75 Другой пример того, что проверка должна предотвращать: RS(T2)={A} WS(T2)={D,E} RS(T3)={A,B} WS(T3)={C,D} T2 проверена T3 проверена время заверш. дефект: w3(D) w2(D) Принципы построения БД Тема 9 T2 76 Другой пример того, что проверка должна предотвращать: разрешать RS(T2)={A} WS(T2)={D,E} RS(T3)={A,B} WS(T3)={C,D} T2 T3 проверена Принципы построения БД проверена заверш. заверш. T2 T2 Тема 9 time 77 Правила проверки достоверности для Tj: (1) Когда Tj начинает фазу 1: ignore(Tj) FIN (2) Во время проверки Tj: если check (Tj) то [ VAL VAL U {Tj}; выполнить фазу записи; FIN FIN U {Tj} ] Принципы построения БД Тема 9 78 Процедура проверки сheck (Tj): для Ti VAL - ignore (Tj) выполнить если [ WS(Ti) RS(Tj) OR Ti FIN ] то RETURN false; RETURN true; Не является ли такая проверка слишком ограничительной ? Принципы построения БД Тема 9 79 Улучшенная процедура проверки сheck (Tj): для Ti VAL - ignore (Tj) выполнить если [ WS(Ti) RS(Tj) OR (Ti FIN AND WS(Ti) WS(Tj) )] то RETURN false; RETURN true; Принципы построения БД Тема 9 80 Упражнение: начало проверена завершение U: RS(U)={B} WS(U)={D} W: RS(W)={A,D} WS(W)={A,C} V: RS(V)={B} WS(V)={D,E} T: RS(T)={A,B} WS(T)={A,C} Принципы построения БД Тема 9 81 Управление параллельным доступом с проверкой достоверности (называемое также оптимистичным контролем параллельного доступа) полезно в некоторых случаях: - Конфликты редки - Имеется достаточно системных ресурсов - Имеются динамически формируемые ограничения целостности Принципы построения БД Тема 9 82 Итоги Изучили механизмы управления параллельным доступом, используемые на практике - двухфазная блокировка (2 PL) - многоуровневая блокировка - древовидные протоколы - проверка достоверности Принципы построения БД Тема 9 83