- •Введение в бд
- •Файловые системы
- •Системы с базами данных
- •Модели данных
- •Альтернативная терминология Терминология, используемая в реляционной модели, порой может привести к путанице, поскольку помимо предложенных двух наборов терминов существует еще один – третий.
- •Сетевая модель данных
- •Иерархическая модель данных
- •Вопросы:
- •Реляционная модель.
- •Реляционная алгебра. Реляционное исчисление.
- •Реляционная модель
- •Упражнения:
- •Реляционные языки
- •Реляционная алгебра
- •Унарные операции реляционной алгебры
- •Операции с множествами
- •Операции соединения
- •Деление
- •Реляционное исчисление
- •Реляционное исчисление кортежей
- •Реляционное исчисление доменов
- •Другие языки
- •Тема 3 Моделирование данных Модель «сущность-связь»
- •Элементы модели «сущность-связь»
- •Сущность
- •Атрибуты
- •Идентификаторы
- •Три типа бинарных связей
- •Диаграммы «сущность-связь»
- •Изображение атрибутов в диаграммах «сущность-связь»
- •Слабые сущности
- •Подтипы сущностей
- •Пример er-диаграммы
- •Диаграммы «сущность-связь» в стиле uml
- •Сущности и связи в uml
- •Представление слабых сущностей
- •Представление подтипов
- •Конструкции ооп, введенные языком uml
- •Семантическая объектная модель
- •Семантические объекты
- •Определение семантических объектов
- •Атрибуты
- •Кардинальное число атрибута
- •Экземпляры объектов
- •Парные атрибуты
- •Объектные идентификаторы
- •Домены атрибутов
- •Представления семантических объектов
- •Создание семантических объектных моделей данных
- •Пример: база данных администрации нтуу «кпи»
- •Спецификация объектов
- •Типы объектов
- •Простые объекты
- •Составные объекты
- •Гибридные объекты
- •Ассоциативные объекты
- •Объекты вида родитель/подтип
- •Объекты вида архетип/версия
- •Переход от семантической объектной модели к модели «сущность-связь»
- •Вопросы:
- •Упражнения:
- •Тема 4 Нормализация
- •Классы отношений
- •Нормальные формы от первой до пятой
- •Тема 5 Методология проектирования баз данных Введение в методологию проектирования баз данных
- •Методология концептуального проектирования базы данных
- •Методология логического проектирования реляционных баз данных
- •Суть состоит в том, что при устранении избыточности очень важно исследовать значение каждой из связей, существующих между сущностями.
- •Методология физического проектирования базы данных
- •Трехуровневая архитектура ansi-sparc
- •Система управления Базами Данных
- •1. Хранение, извлечение и обновление данных
- •2. Каталог доступный конечным пользователям
- •Поддержка транзакций
- •Сервисы управления параллельностью
- •Сервисы восстановления
- •6. Сервисы контроля доступа к данным
- •Поддержка обмена данными
- •8. Вспомогательные службы
- •Преимущества:
- •Недостатки:
- •Вопросы:
- •Упражнения:
- •История языка sql
- •Особая роль языка sql
- •Используемая терминология
- •Запись операторов sql
- •Манипулирование данными
- •Литералы
- •Простые запросы
- •Выборка строк (конструкция where)
- •Сортировка результатов (конструкция order by)
- •Использование агрегирующих функций языка sql
- •Группирование результатов (конструкция group by)
- •Ограничения на выполнение группирования (конструкция having)
- •Подзапросы
- •Ключевые слова any и all
- •Многотабличные запросы
- •Внешние соединения
- •Выполнение соединений
- •Ключевые слова exists и not exist
- •Комбинирование результирующих таблиц (операции union, intersect и except)
- •Изменение содержимого базы данных
- •Добавление новых данных в таблицу (оператор insert)
- •Модификация данных в базе (оператор update)
- •Удаление данных из базы (оператор delete)
- •Скалярные типы данных языка sql
- •Логические данные (тип boolean)
- •Символьные данные (тип character)
- •Битовые данные (тип bit)
- •Точные числовые данные (тип exact numeric)
- •Округленные числовые данные (тип approximate numeric)
- •Дата и время (тип datetime)
- •Интервальный тип данных interval
- •Скалярные операторы
- •Средства поддержки целостности данных
- •Обязательные данные
- •Ограничения для доменов
- •Целостность сущностей
- •Ссылочная целостность
- •Требования данного предприятия
- •Определение данных
- •Создание баз данных
- •Создание таблиц (оператор create table)
- •Модификация определения таблицы (оператор alter table)
- •Удаление таблиц (оператор drop table)
- •Создание индекса (оператор create index)
- •Удаление индекса (оператор drop index)
- •Представления
- •Создание представлений (оператор create view)
- •Удаление представлений (оператор drop view)
- •Замена представлений
- •Ограничения на использование представлений
- •Обновление данных в представлениях
- •Использование конструкции with check option
- •Преимущества и недостатки представлений
- •Преимущества
- •Недостатки
- •Материализация представлений
- •Использование транзакций
- •Немедленные и отложенные ограничения поддержки целостности данных
- •Управление доступом к данным
- •Идентификаторы пользователей и права владения
- •Привилегии
- •Предоставление привилегий другим пользователям (оператор grant)
- •Отмена предоставленных пользователям привилегий (оператор revoke)
- •Приложение
- •Тема 7.3 Хранимые процедуры и функции. Триггеры.
- •Создание хранимых процедур и функций
- •Простые формы выражений
- •Поддержка транзакций
- •Свойства транзакций
- •Архитектура базы данных
- •Управление параллельным доступом
- •Проблема потерянного обновления
- •Проблема зависимости от незафиксированных результатов (или "грязного" чтения)
- •Проблема анализа несогласованности
- •Упорядочиваемость и восстанавливаемость
- •Конфликтная упорядочиваемость
- •Упорядочиваемость по просмотру
- •Восстанавливаемость
- •Методы управления параллельным доступом
- •Методы блокировки
- •Двухфазная блокировка
- •Управление параллельным выполнением при использовании индексных структур
- •Защелки
- •Взаимоблокировка
- •Тайм-ауты
- •Предотвращение взаимоблокировок
- •Обнаружение взаимоблокировок
- •Частота выполнения операции обнаружения взаимоблокировок
- •Возобновление нормальной работы после обнаружения взаимоблокировки
- •Использование временных отметок
- •Правило записи Томаса
- •Сравнение методов
- •Упорядочение временных отметок в случае многих версий
- •Оптимистические методы упорядочения
- •Степень детализации блокируемых элементов данных
- •Иерархия степеней детализации
- •Блокировка с учетом нескольких степеней детализации
- •Восстановление базы данных
- •Необходимость восстановления
- •Транзакции и восстановление
- •Управление буферами базы данных
- •Функции восстановления
- •Механизм резервного копирования
- •Файл журнала
- •Создание контрольных точек
- •Методы восстановления
- •Метод восстановления с использованием отложенного обновления
- •Метод восстановления с использованием немедленного обновления
- •Метод теневого страничного обмена
- •Улучшенные модели транзакций
- •Модель вложенных транзакций
- •Эмуляция механизма вложенных транзакций с помощью точек сохранения
- •Хроники
- •Модель многоуровневых транзакций
- •Динамическая реструктуризация
- •Модели рабочих потоков
- •Общий обзор методов обработки запросов
- •Основные этапы обработки запросов
- •Динамическая и статическая оптимизация запросов
- •Декомпозиция запросов
- •Нормализация
- •Семантический анализ
- •Упрощение
- •Реструктуризация запросов
- •Эвристический подход к оптимизации запросов
- •Правила преобразования операций реляционной алгебры
- •Оценка стоимости операций реляционной алгебры
- •Статистические показатели базы данных
- •Вариант 6. Поиск по равенству значению кластеризующего (вторичного) индекса
- •Вариант 7. Поиск по равенству значению некластеризующего (вторичного) индекса
- •Составные предикаты
- •Конъюнктивная выборка без дизъюнкций
- •Выборки с дизъюнкциями
- •Конвейерная обработка данных
- •Тема 10
- •Основные типы угроз
- •Контрмеры – компьютерные средства контроля
- •Авторизация пользователей
- •Привилегии
- •Права владения и привилегии
- •Представления (подсхемы)
- •Резервное копирование и восстановление
- •Поддержка целостности
- •Шифрование
- •Raid (массив независимых дисковых накопителей с избыточностью)
- •Средства защиты субд Microsoft Access
- •Установка пароля
- •Защита на уровне пользователя
Двухфазная блокировка
Двухфазная блокировка – протокол, предусматривающий, что все операции блокирования предшествуют первой операции разблокирования.
В соответствии с основным правилом этого протокола каждая транзакция может быть разделена на две фазы: фазу расширения, в которой устанавливаются все необходимые блокировки и не освобождается ни одна из них, и фазу сужения, в которой освобождаются все установленные ранее блокировки, но не может быть установлена ни одна новая блокировка. При этом нет никакой необходимости в том, чтобы все требуемые блокировки были установлены одновременно. Как правило, транзакция устанавливает некоторые блокировки, выполняет определенную обработку, после чего может затребовать установку дополнительных необходимых ей блокировок. Однако она не может освободить ни одной из блокировок, пока не будет достигнута стадия выполнения, на которой больше не потребуется установка новых блокировок. Работа ведется по приведенным ниже правилам.
Прежде чем начать работу с элементом данных, транзакция должна установить для него блокировку. Блокировка может устанавливаться для чтения или записи, в зависимости от типа требуемого доступа.
Как только транзакция освободит хотя бы одну установленную ею блокировку, она уже не имеет права затребовать блокировки новых элементов.
Если СУБД поддерживает операции повышения уровня блокировок, то такое повышение допускается только в фазе расширения. Подобные действия могут потребовать перехода транзакции в состояние ожидания на то время, пока другие транзакции отменят установленные ими разделяемые блокировки данного элемента. Снижение уровня блокировки допускается только в фазе сужения.
Рассмотрим, как протокол двухфазной блокировки может помочь в устранении проблем потерянного обновления, зависимости от незафиксированных результатов и анализа несогласованности.
Пример 8.4. Использование протокола двухфазной блокировки для устранения проблемы потерянного обновления.
Способ устранения проблемы потерянного обновления с помощью протокола двухфазной блокировки показан в табл. 8.4. Чтобы избежать потери выполненного обновления, транзакция Т2 должна вначале установить исключительную блокировку на элементе «Кол-во студентов». Затем она может считать из базы данных текущее значение этого элемента, увеличить его на 10 человек и записать результат в базу данных. В момент запуска транзакция Т1 также потребует установить исключительную блокировку элемента «Кол-во студентов». Но, поскольку на элемент данных «Кол-во студентов» к этому моменту уже установлена исключительная блокировка в транзакции Т2, этот запрос со стороны транзакции Т1 не влечет за собой немедленного предоставления требуемой блокировки, поэтому транзакция Т1 переходит в состояние ожидания до освобождения блокировки транзакцией Т2. Однако это произойдет только после фиксации результатов выполнения транзакции Т2 в базе данных.
Таблица 8.4. Пример решения проблемы потерянного обновления
Время |
Транзакция Т1 |
Транзакция Т2 |
Поле «Кол-во студентов» записи ТМ-32 |
t1 |
|
Начало транзакции |
30 |
t2 |
Начало транзакции |
Исключительная блокировка «Кол-во студентов» |
30 |
t3 |
Исключительная блокировка «Кол-во студентов» |
Считывание КС из «Кол-во студентов» |
30 |
t4 |
Ожидание |
КС=КС+10 |
40 |
t5 |
Ожидание |
Запись КС в «Кол-во студентов» |
40 |
t6 |
Ожидание |
Окончание транзакции/ снятие блокировки |
40 |
t7 |
Считывание КС из «Кол-во студентов» |
|
40 |
t8 |
КС=КС-5 |
|
35 |
t9 |
Запись КС в «Кол-во студентов» |
|
35 |
t10 |
Окончание транзакции/ снятие блокировки |
|
35 |
Пример 8.5. Использование протокола двухфазной блокировки для
устранения проблемы зависимости от незафиксированных
результатов
Способ устранения проблемы зависимости от незафиксированных результатов транзакций продемонстрирован в табл. 8.5. Во избежание возникновения данной проблемы транзакция Т4 должна вначале потребовать предоставления ей исключительной блокировки на элемент данных «Кол-во студентов». Далее она может прочитать из базы данных текущее значение этого элемента, увеличить его на 10 человек, а затем записать новое значение в базу данных. При выполнении отката этой транзакции выполненное ею обновление значения элемента «Кол-во студентов» будет отменено и этому элементу данных будет возвращено прежнее значение, равное 30 человек. В момент начала транзакции Т3 она также потребует предоставления ей исключительной блокировки элемента «Кол-во студентов». Но, поскольку на этот элемент данных уже распространяется исключительная блокировка, установленная транзакцией Т4, запрос транзакции Т3 удовлетворить не удастся и она будет переведена в состояние ожидания вплоть до освобождения транзакцией Т4 необходимого ей элемента данных. Это произойдет только после отката результатов выполнения транзакции Т4 и приведения базы данных в первоначальное состояние.
Таблица 8.5. Пример решения проблемы зависимости от незафиксированных результатов
Время |
Транзакция Т3 |
Транзакция Т4 |
Поле «Кол-во студентов» записи ТМ-32 |
t1 |
|
Начало транзакции |
30 |
t2 |
|
Исключительная блокировка «Кол-во студентов» |
30 |
t3 |
|
Считывание КС из «Кол-во студентов» |
30 |
t4 |
Начало транзакции |
КС=КС+10 |
40 |
t5 |
Исключительная блокировка «Кол-во студентов» |
Запись КС в «Кол-во студентов» |
40 |
t6 |
Ожидание |
Откат/ снятие блокировки |
30 |
t7 |
Считывание КС из «Кол-во студентов» |
|
30 |
t8 |
КС=КС-5 |
|
25 |
t9 |
Запись КС в «Кол-во студентов» |
|
25 |
t10 |
Окончание транзакции/ снятие блокировки |
|
25 |
Пример 8.6. Использование протокола двухфазной блокировки для
устранения проблемы анализа несогласованности
Способ устранения проблемы анализа несогласованности показан в табл. 8.6. Для устранения этой проблемы в транзакции Т5 операциям чтения должна предшествовать установка исключительных блокировок, тогда как в транзакции Т6 операциям чтения должна предшествовать установка разделяемых блокировок. Поэтому при запуске на выполнение транзакция Т5 выдает запрос и получает исключительную блокировку на элемент «Кол-во студентов». В результате при попытке получения разделяемой блокировки на элемент «Кол-во студентов» в транзакции Т6 выполнение запроса откладывается и эта транзакция переходит в состояние ожидания, вплоть до освобождения требуемого ей элемента данных, т.е. до фиксации результатов транзакции Т5.
Таблица 8.6. Пример решения проблемы анализа несогласованности
Время |
Транзакция Т5 |
Транзакция Т6 |
Поле «Кол-во студентов» записи ТМ-32 |
Поле «Кол-во студентов» записи ТМ-31 |
Поле «Кол-во студентов» записи ТЗ-31 |
Общее количество студентов
|
t1 |
|
Начало транзакции |
30 |
25 |
20 |
|
t2 |
Начало транзакции |
Сумма=0 |
30 |
25 |
20 |
0 |
t3 |
Исключительная блокировка «Кол-во студентов» ТМ-32 |
|
30 |
25 |
20 |
0 |
t4 |
Считывание значение «Кол-во студентов» из ТМ-32 |
Разделяемая блокировка «Кол-во студентов» в ТМ-32 |
25 |
25 |
20 |
0 |
t5 |
КС=КС-5 |
Ожидание |
25 |
25 |
20 |
0 |
t6 |
Запись «Кол-во студентов» в ТМ-32 |
Ожидание |
25 |
25 |
20 |
0 |
t7 |
Исключительная блокировка «Кол-во студентов» ТМ-31 |
Ожидание |
25 |
30 |
20 |
0 |
t8
|
Считывание значение «Кол-во студентов» из ТМ-31 |
Ожидание |
25 |
30 |
20 |
0 |
t9 |
КС=КС+5 |
Ожидание |
25 |
30 |
20 |
0 |
t10 |
Запись в «Кол-во студентов» в ТМ-31 |
Ожидание |
25 |
30 |
20 |
0 |
t11 |
Окончание транзакции/ снятие всех блокировок Т5 |
Ожидание |
|
|
|
0 |
t12 |
|
Считывание значение «Кол-во студентов» из ТМ-32 |
|
|
|
0 |
t13 |
|
Сумма = Сумма +КС |
|
|
|
25 |
t14 |
|
Разделяемая блокировка «Кол-во студентов» в ТЗ-31 |
|
|
|
25 |
t15 |
|
Считывание значение «Кол-во студентов» из ТЗ-31 |
|
|
|
25 |
t16 |
|
Сумма = Сумма +КС |
|
|
|
45 |
t17 |
|
Разделяемая блокировка «Кол-во студентов» в ТМ-31 |
|
|
|
45 |
t18 |
|
Считывание значение «Кол-во студентов» из ТМ-31 |
|
|
|
45 |
t19 |
|
Сумма = Сумма +КС |
|
|
|
75 |
t20 |
|
Окончание транзакции /снятие всех блокировок Т6 |
25 |
30 |
20 |
75 |
Можно доказать, что если во всех транзакциях графика соблюдается протокол двухфазной блокировки, этот график будет являться конфликтно упорядочиваемым. Но, несмотря на то, что протокол двухфазной блокировки гарантирует упорядочиваемость, могут возникать проблемы при неправильном выборе момента освобождения блокировок. Это возникает при каскадном откате.
Каскадный откат – ситуация, в которой отмена единственной транзакции приводит к целому ряду откатов зависящих от нее транзакций.
Каскадные откаты – явление нежелательное, поскольку потенциально они способны привести к отмене большого объема выполненной работы. Совершенно очевидно, что было бы очень полезно разработать протокол, исключающий возникновение каскадных откатов. Одним из возможных вариантов является дополнение обычного протокола двухфазной блокировки требованием откладывать выполнение отмены всех установленных блокировок до конца транзакции, как в предыдущих примерах. В подобном случае продемонстрированная в последнем примере проблема никогда не возникнет. Этот вариант протокола называют строгим протоколом двухфазной блокировки. Можно доказать, что при использовании строгого протокола двухфазной блокировки транзакции могут быть упорядочены в той последовательности, в которой происходит их фиксация.
Другой вариант протокола 2PL, называемый ограниченным протоколом двухфазной блокировки, предусматривает приостановку до конца транзакции освобождения только исключительных блокировок. В большинстве СУБД реализуется один из этих двух вариантов протокола 2PL.
Еще одна проблема, связанная с двухфазной блокировкой, может иметь место при любых схемах освобождения заблокированных элементов. Эта проблема носит название взаимоблокировки и является следствием того факта, что любая транзакция может быть переведена в состояние ожидания до освобождения требуемого ей элемента данных. Если две транзакции будут ожидать освобождения элементов, заблокированных другой транзакцией из этой же пары, то возникнет состояние взаимоблокировки. Кроме того, транзакции могут также входить в состояние активной блокировки, при которой они остаются в состоянии ожидания неопределенно долгое время и не имеют возможности устанавливать какие-либо новые блокировки, хотя в СУБД не наблюдается состояние взаимоблокировки. Эта ситуация возможна в случаях, когда алгоритм перевода транзакций в состояние ожидания не предоставляет равные условия всем транзакциям и не учитывает время, проведенное транзакциями в состоянии ожидания. Для предотвращения активной блокировки может использоваться система приоритетов, в которой приоритет транзакции тем выше, чем дольше она находится в состоянии ожидания. Например, для ожидающих транзакций может быть предусмотрена последовательная очередь, действующая по принципу "первым поступил, первым обслуживается".
