Принципы построения и работы баз данных Тема 10: Дополнительные вопросы обработки транзакций Принципы построения БД Тема 10 1 Разделы для беглого просмотра: • Глава 17: нет (читать все разделы) • Глава 18: – просмотреть 18.8 • Глава 19: – просмотреть 19.4, 19.5, 19.6, 19.7 Принципы построения БД Тема 10 2 Глава 19 Дополнительные вопросы обработки транзакций Темы: • Каскадирующий откат(отмена транзакций), восстанавливаемое расписание • Тупики – Предупреждение – Распознавание • Долгие транзакции (вложенность, компенсация) • Видимая упорядоченность • Распределенные транзакции Принципы построения БД Тема 10 3 Управление параллельным доступом и восстановление Ti Wj(A) Каскадирующий откат Тема 10 … …… ri(A) Commit Ti Abort Tj Принципы построения БД …… Tj … Пример: (Плохо!) 4 • График является конфликтно-упорядочиваемым • Tj Ti • Но не восстанавливаемым • Необходимо «окончательное» решение по каждой транзакции: – commit решение – система гарантирует,что транзакция уже завершена или завершится при любых обстоятельствах – abort решение - система гарантирует,что транзакция прервана или будет прервана (не влияет на состояние БД) Принципы построения БД Тема 10 5 Для моделирования этого, введем 2 новых действия: • Ci – транзакция Ti завершена (commit) • Ai - транзакция Ti отменена (abort) Вернемся к примеру: Ti ... ... Tj ri(A) ... ... Wj(A) Ci можно ли завершить транзакцию здесь? Принципы построения БД Тема 10 6 Определение Ti читает из Tj в графике S (Tj S Ti), если (1) wj(A) <S ri(A) (2) aj <S ri(A) (< : не предшествует) (3) Если wj(A) <S wk(A) <S ri(A), то ak <S ri(A) График S является восстанавливаемым, если для любых транзакций Ti,Tj таких,что Ti читает из Tj в графике S (Tj S Ti) , j i и Ti завершена в S (Ci S), то Cj <S Ci Принципы построения БД Тема 10 7 Замечание: В транзакция операции чтения и записи предшествуют завершению(commit) или прерыванию (abort) Если Ci Ti, то ri(A) < Ci wi(A) < Ci Если Ai Ti, то ri(A) < Ai wi(A) < Ai • Также, транзакция может иметь не более одной операции Ci или Ai Как достичь восстанавливаемого графика? Принципы построения БД Тема 10 8 Tj Ti ... ... ... ... ... При двухфазной блокировке сохранять блокировки записи до завершения транзакции (строгая двухфазная блокировка) ... Wj(A) ... Cj uj(A) ri(A) При использовании проверки достоверности – без изменений Принципы построения БД Тема 10 9 • График S является восстанавливаемым, если каждая транзакция завершается только после завершения всех транзакций, из которых она читает. • График S избегает каскадирующего отката если каждая транзакция может читать только те значения, которые записаны уже завершенными транзакциями. Принципы построения БД Тема 10 10 • График S является строгим, если каждая транзакция может читать и писать только те элементы БД, которые записаны завершенными транзакциями. RC (восстанавливаемые) ST(строгие) SERIAL Avoids cascading rollback (упорядоченные) ACR(избег.каскадирующего отката) Принципы построения БД Тема 10 11 Где здесь сериализуемые графики? Конфликтно-сериализуемые? RC ST SERIAL Avoids cascading rollback ACR Принципы построения БД Тема 10 12 Примеры • Восстанавливаемое: – w1(A) w1(B) w2(A) r2(B) c1 c2 • Избег.каскад.отката: – w1(A) w1(B) w2(A) c1 r2(B) c2 Предполагается w2(A) выполн.без чтения • Строгое: – w1(A) w1(B) c1 w2(A) r2(B) c2 Принципы построения БД Тема 10 13 Тупики • Распознавание – Граф ожидания • Предупреждение – Упорядочение ресурсов – Время простоя – «Ждать-умереть» – «Ранить-ждать» Принципы построения БД Тема 10 14 Распознавание тупиков • • • • Построить граф ожидания Использовать структуру таблиц блокировок Дополнять граф постоянно или периодично Когда найден цикл, отменить определенные транзакции T1 T4 Принципы построения БД T5 T2 T6 T3 Тема 10 T7 15 Упорядочивание ресурсов • Упорядочить все элементы A1, A2, …, An • Транзакция Т может блокировать Ai после Aj только если i > j Проблема : В большинстве случаев требование упорядочивания запросов на блокировку элементов является не реалистичным Принципы построения БД Тема 10 16 Время простоя • Если транзакция ожидает дольше, чем L сек., отменить ее! • Простая схема • Трудно выбрать L «Ждать-умереть» • В момент поступления транзакция получает отметку времени ts(Ti) • Ti может ждать Tj только если ts(Ti)< ts(Tj) ...иначе - умереть Принципы построения БД Тема 10 17 Пример: T1 ждать (ts =10) T2 ждать? ждать (ts =20) T3 (ts =25) Принципы построения БД Тема 10 18 «Ранить-ждать» • В момент поступления транзакция получает отметку времени ts(Ti) • Ti «ранит» Tj если ts(Ti)< ts(Tj) иначе Ti ждет “ранение”: Tj отменяется и разрешает блокировку для Ti, однако, если к моменту реализации «ранения» Tj уже завершилась и разблокировала нужный Ti элемент, Tj выживает и не отменяется. Принципы построения БД Тема 10 19 Пример T1 ждать (ts =25) T2 ждать ждать (ts =20) T3 (ts =10) Принципы построения БД Тема 10 20 Команды программы/пользователя Много различных вариантов, но в основном • Begin_work – начать транзакцию • Commit_work – завершить транзакцию • Abort_work – прервать транзакцию Принципы построения БД Тема 10 21 Вложенные транзакции ... Программа пользователя: ... ... Begin_work; Если все в порядке, то commit work иначе abort_work Принципы построения БД Тема 10 22 Вложенные транзакции ... Программа пользователя: Begin_work; Begin_work; ... ... Если все в порядке, то commit_work иначе {abort_work; попытаться сделать что-то другое …} Если все в порядке, то commit work иначе abort_work Принципы построения БД Тема 10 23 Параллельные вложенные транзакции begin-work ... T1: parallel: T11: begin_work T1 ... T1 commit_work T11 ... ... T12: begin_work T12 commit_work commit_work Принципы построения БД Тема 10 24 Блокировка Что мы на самом деле блокируем? Принципы построения БД Тема 10 25 Пример: ... Ti ... Читать запись r1 выполнить блокир.записей ... Читать запись r1 ... Модифицировать запись r3 Принципы построения БД Тема 10 26 Но на нижнем уровне: Если блокируются Id записи R1 R2 Данные при чтении R1, это может помешать модификации R2 (что может требовать Реорганизации внутри R3 блока) страницы диска Принципы построения БД Тема 10 27 Решение: рассматривать БД на 2-х уровнях Верхний уровень: действия над записями блокировка записей действия возврат/повтор - логические например, вставить запись(X,Y,Z) повтор: вставить(X,Y,Z) возврат: удалить Нижний уровень: имеет дело с физическими деталями «защелкивание» (latch)страницы на время действия (освобождение в конце действия) Принципы построения БД Тема 10 28 Замечание: возврат не возвращает физически БД в то же состояние; только в то же логическое состояние например., R1 R2 Принципы построения БД вставить R3 возврат (удалить R3) R1 R2 R1 R2 R3 Тема 10 29 Протоколирование логических действий • Логические действия обычно распространяются на один физический блок • Записи протокола-повтора-возврата соответствуют логическим действиям повтора/возврата • Задача: действия должны быть идемпотентными • Плохой пример: повтор вставки может приводить к многократной вставке одного и того же значения! Принципы построения БД Тема 10 30 Решение: Добавить логический номер действия lsn=25 ... 3, v1 Запись протокола: •LSN=26 •OP=insert(5,v2) into P • ... lsn=26 ... 3, v1 5, v2 Принципы построения БД Тема 10 31 Проблема пока остается! Отдельная запись для отмены lsn=27 lsn=24 ... 3, v1 4, v2 lsn=25 ... lsn=26 3, v1 T1 Удалить 4 Принципы построения БД 3, v1 5, v3 T2 Вставить 5 Тема 10 ... lsn=?? ... 3, v1 5, v3 4, v2 отменить Удал. 4 32 Компенсационные записи протокола • Записи протокола для индикации, что выполнено действие возврата(отмены) • Замечание: Компенсация может не возвращать страницу в начальное состояние Принципы построения БД Тема 10 33 Пример Протокол: ... lsn=21 lsn=27 T1 T1 a1 ... a2 p1 p2 Принципы построения БД ... Тема 10 lsn=35 T1 a2-1 ... p2 34 Что делать с p2 (при отмене T1)? • Если lsn(p2)<27 то ... ? • Если 27 lsn(p2) < 35 то ... ? • Если lsn(p2) 35 то ... ? Замечание: lsn(p2) – логический номер действия(lsn) копии p на диске Принципы построения БД Тема 10 35 Стратегия восстановления [1] Восстановить состояние на момент сбоя – Найти последнюю завершенную контрольную точку, Ck, и положить ac – множеству активных транзакций – Просмотреть протокол от Ck до конца: • Для каждой записи протокола [lsn, page]: если lsn(page) < lsn, то повторить действие • Если запись протокола start или commit, обновить ac Принципы построения БД Тема 10 36 Стратегия восстановления [2] Прервать незавершенные транзакции ac теперь содержит транзакции, которые необходимо прервать – Просмотреть протокол от конца до Ck : • Для каждой записи протокола относящейся к транзакциям из ac (пропуская компенсированные пары),отменить действие (сделав соответствующую запись в протоколе) – Для каждой транзакции, оставшейся в ac после достижения Ck, читать их записи до Ck и отменить их действия Принципы построения БД Тема 10 37 Пример Протокол: chk pt ... lsn=21 T1 a1 p1 Принципы построения БД ... lsn=27 T1 a2 p2 ... lsn=29 T1 a3 p3 Тема 10 ... lsn=31 T1 a3-1 p3 ... lsn=35 T1 a2-1 p2 ... 38 Пример Указатель на отменяемое действие Протокол: chk pt ... lsn=21 T1 a1 p1 ... lsn=27 T1 a2 p2 ... lsn=29 T1 a3 p3 ... lsn=31 T1 a3-1 p3 ... lsn=35 T1 a2-1 p2 ... Указатель на предыдущее действие Принципы построения БД Тема 10 39 Родственные идеи: Хроники • Долгоживущие транзакции: T1, T2, ... Tn • Каждый шаг/транзакция Ti имеет компенсирующую транзакцию Ti-1 • Семантика атомарности: выполнить одну из последовательностей ... – T1, T2, ... Tn – T1, T2, ... Tn-1 T-1n-1, T-1n-2, ... T-11 – T1, T2, ... Tn-2 T-1n-2, T-1n-3, ... T-11 – T1, T-11 – или ничего Принципы построения БД Тема 10 40 Итоги • Каскадирующие откаты Восстанавливаемые расписания • Тупики – Предупреждение – Распознавание • Вложенные транзакции • Многоуровневое рассмотрение транзакций Принципы построения БД Тема 10 41 Видимая упорядоченность Конфликтноэквивалентность Видимоэквивалентность Конфликтноупорядочиваемость Видимоупорядочиваемость Принципы построения БД Тема 10 42 Мотивирующий пример График Q T1 Read(A) T2 T3 Write(A) Write(A) Write(A) Принципы построения БД Тема 10 43 То же что и Q = r1(A) w2(A) w1(A) w3(A) P(Q): T1 T2 T3 Не является конфликтно-упорядочиваемым! Принципы построения БД Тема 10 44 Сравним Q с Ss, упорядоченным графиком: Q T1 T2 T3 Read(A) Write(A) Write(A) Write(A) Ss T1 T2 T3 Read(A) Write(A) Write(A) Write(A) Принципы построения БД Тема 10 45 • T1 читает одинаковое значение в Q, Ss • T2, T3 читают что-то (или ничего?) • После Q или Ss, БД остается в том же состоянии Что плохого в графике Q? Определение Графики S1,S2 видимо-эквивалентны если: (1) Если в S1: wj(A) ri(A) означает “читает значение, произведенное” То в S2: wj(A) ri(A) (2) Если в S1: ri(A) читает начальное значение БД, то в S2: ri(A) также читает начальное значение БД, (3) Если в S1: Ti выполняет последнюю запись А в БД, то в S2: Ti также выполняет последнюю запись А в БД Принципы построения БД Тема 10 46 Определение График S1 является видимо-упорядочиваемым, если он видимо-эквивалентен некоторому упорядоченному графику Видимоупорядочиваемость Конфликтноупорядочиваемость ? Видимо Конфликтноупорядочиваемость упорядочиваемость например, см. график Q Принципы построения БД Тема 10 47 Лемма Конфликтно-упорядочиваемость видимо-упорядочиваемость Доказательство: Перестановка не конфликтующих действий не изменяет ни то, что транзакция читает из БД, ни то что остается в БД в результате это й транзакции Принципы построения БД Тема 10 48 Все графики Видимо-упорядоч. Конфликтноупорядоч. Замечание: Все видимо-упорядочиваемые графики, не являющиеся конфликтно-упорядочиваемыми имеют «бесполезные» операции записи S= W2(A) … W3(A) ….. нет чтения Принципы построения БД Тема 10 49 Распределенные Базы Данных Распределенная База Данных СУБД СУБД СУБД СУБД данные данные данные данные Принципы построения БД Тема 10 50 Преимущества рапределенной БД • • • • • модульность Устойчивость к сбоям Высокая производительность Разделение данных Сравнительно низкая стоимость Принципы построения БД Тема 10 51 Вопросы • Распределение данных • Использование параллельной обработки • Одновременный доступ к данным и восстановление • Неоднородность Принципы построения БД Тема 10 52 Параллелизм: Потоковая (конвейерная) обработка • Пример: – T1 SELECT * FROM A WHERE cond – T2 JOIN T1 and B select join A B Принципы построения БД (с индексом) Тема 10 53 Параллелизм : параллельная обработка • Пример: SELECT * FROM A WHERE cond merge размещение данных важно... select select select A where A where A where A.x < 10 Принципы построения БД 10 A.x < 20 Тема 10 20 A.x 54 Обработка соединения • Пример: JOIN A, B по атрибуту X A1 A2 B1 B2 A.x < 10 A.x 10 B.x < 10 B.x 10 Стратегия соединения Принципы построения БД Тема 10 55 Одновременный доступ и восстановление • Двухфазное завершение(2РС -Two Phase Commit) Bank Mainframe ATM Принципы построения БД Тема 10 56 2PC: Выдача денег банкоматом • Центральный компьютер является координатором • Фаза 1: Банкомат проверяет наличие денег, центральный компьютер проверяет остаток на счете (деньги и часть остатка на счете резервируется) • Фаза 2: Банкомат выдает деньги; центральный компьютер уменьшает остаток на счете Принципы построения БД Тема 10 57