- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
–не совместима с блокировкой объекта c в режиме X в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W.
–не совместима с блокировкой объекта c в режиме S или IS в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида W/R при доступе к некоторым объектам , входящим в c.
–не совместима с блокировкой объекта c в режиме IX или SIX в транзакции T2, поскольку иначе мог бы проявиться конфликт транзакций T1 и T2 вида R/W при доступе к некоторым объектам , входящим в c.
l
Понятие относительной силы блокировок можно описать при помощи диаграммы приоритета (см. рис. 7). Более точная формулировка протокола преднамеренных блокировок для доступа к данным выглядит следующим образом:
1.При задании X-блокировки для сложного объекта неявным образом задается X-блокировка для всех дочерних объектов этого объекта.
2.При задании S- или SIX-блокировки для сложного объекта неявным образом задается S- блокировка для всех дочерних объектов этого объекта.
3.Прежде чем транзакция наложит S- или IS-блокировку на заданный объект, она должна задать IS-блокировку (или более сильную) по крайней мере для одного родительского объекта этого объекта.
4.Прежде чем транзакция наложит X-, IXили SIX-блокировку на заданный объект, она должна задать IX-блокировку (или более сильную) для всех родительских объектов этого объекта.
5.Прежде чем для данной транзакции будет отменена блокировка для данного объекта, должны быть отменены все блокировки для дочерних объектов этого объекта.
Протокол преднамеренных блокировок не определяет однозначно, какие блокировки должны быть наложены на родительский объект при блокировании дочернего объекта. Например, при намерении задать S-блокировку кортежа отношения, на отношение, включающее этот кортеж, можно наложить любую из блокировок типа IS, S, IX, SIX, X. При намерении задать X-блокировку кортежа, на отношение можно наложить любую из блокировок типа IX, SIX, X.
X
SIX
S IX
IS
Предикатные блокировки
Метод гранулированных синхронизационных захватов (блоки-
ровок) не решает проблему фантомов (если, конечно, не огра-
ничиться использованием блокировок таблиц в режимах S и X). Для решения этой проблемы необходимо перейти от блокировок индивидуальных («физических») объектов базы данных, к блокировке условий (предикатов), которым удовлетворяют эти объекты.
Рис. 7. Диаграмма приоритета преднамеренных блокировок (сверху — более сильные блокировки, снизу — более слабые)
Поскольку любая операция над реляционной базой данных задается некоторым условием, идеальным выбором было бы требовать синхронизационную блокировку в режиме S или X именно этого условия. Но непонятно, как определить совместимость двух предикатных блокировок.
Проблема совместимости сравнительно легко решается для случая простых условий, состоящих из сравнений значений атрубтов (ă : ď; ą; ě; ; ), соединенных конъюнкциями/дизъюнкциями.
Проблема фиктивных элементов (фантомов) легко решается с использованием предикатных блокировок, т. к. вторая транзакция не может вставить новые строки, удовлетворяющие уже заблокированному условию.
66
Заметим, что блокировка всего отношение в каком-либо режиме фактически есть предикатная блокировка, т. к. каждое отношение имеет предикат, определяющий, какие кортежи содержатся в отношении, и блокировка отношения есть блокировка предиката этой таблицы.
Тупиковые ситуации
Ситуация тупика (dead locks) может возникать при наличии не менее двух транзакций, каждая из которых выполняет не менее двух операций, а именно при ожидании транзакциями завершения друг друга. Для двух транзакций в общем случае тупик имеет вид:
Транзакция T1 |
|
|
|
Время |
Транзакция T2 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
Блокировка |
объекта |
|
1 |
— |
t |
— |
|
|
|
|
успешна |
|
|
|
|
|
|
|
|||
|
|
|
1 |
Блокировка |
объекта |
|
|
— |
||
— |
|
|
|
t |
|
2 |
||||
|
|
|
|
успешна |
|
|
|
|||
|
|
|
|
|
2 |
|
|
|
||
Блокировка |
объекта |
|
2 |
— |
|
|
|
|
|
|
конфликтует |
с блокировкой, |
t3 |
— |
|
|
|
|
|||
наложенной |
транзакцией T |
|
|
|
|
|
|
|
||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Блокировка |
объекта |
|
1 |
— |
Ожидание... |
|
|
|
|
t4 |
конфликтует с блокировкой, |
||||
|
|
|
|
|
|
наложенной |
транзакцией T |
|
||
|
|
|
|
|
|
|
|
|
1 |
|
Ожидание... |
|
|
|
|
ą t4 |
Ожидание... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Т. к. нормального выхода из тупиковой ситуации нет, то такую ситуацию необходимо распознавать и устранять. Методом разрешения тупиковой ситуации является откат одной из транзакций (называемой транзакцией-жертвой) так, чтобы другие транзакции продолжили свою работу. После разрешения тупика, транзакцию, выбранную в качестве жертвы можно повторить заново.
Определение 10. Граф ожидания транзакций (wait-for graph) — это ориентированный двудольный граф, в котором существует два типа вершин:
•вершины, соответствующие транзакциям,
•и вершины, соответствующие объектам захвата,
иимеются дуги
•от вершины-транзакции к вершине-объекту, если данный объект захвачен указанной транзакцией,
•от вершин-объектов к вершине-транзакции, если данный транзакция ожидает указанный объект.
Можно представить два принципиальных подхода к обнаружению тупиковой ситуации и выбору транзакции-жертвы:
1.СУБД не следит за возникновением тупиков. Транзакции сами принимают решение,
быть ли им жертвой. Метод характерен для настольных СУБД (FoxPro и т.п.).
Для транзакций задается время ожидания (или число попыток), в течение которого транзакция пытается установить нужную блокировку. Если за указанное время (или после указанного числа попыток) блокировка не завершается успешно, то транзакция откатывается (или генерируется ошибочная ситуация).
За простоту этого метода приходится платить тем, что транзакции-жертвы выбираются, вообще говоря, случайным образом. В результате из-за одной простой транзакции может откатиться очень дорогая транзакция, на выполнение которой уже потрачено много времени и ресурсов системы.
2.За возникновением тупиковой ситуации следит сама СУБД, она же принимает решение, ка-
кой транзакцией пожертвовать. Метод характерен для промышленных СУБД (ORACLE, MS SQL Server и т.п.).
67