- •Информация и данные
- •Основные понятия систем с базами данных
- •Пользователи информационной системы с БД
- •Требования к информационным системам с базами данных
- •Основные компоненты ИС с базами данных
- •Архитектура систем с базами данных. Понятие модели данных
- •Сущности и их свойства
- •Связи (отношения) между сущностями
- •Виды связей между сущностями
- •Еще о сущностях, их свойствах и связях между ними
- •Модели данных. Ранние подходы к организации баз данных
- •Основные понятия реляционной модели данных
- •Структуры данных реляционной модели. Реляционные отношения
- •Свойства отношений
- •Отсутствие в отношении одинаковых кортежей
- •Кортежи отношения не упорядочены (сверху вниз)
- •Атрибуты отношения не упорядочены (слева направо)
- •Значения всех атрибутов являются атомарными
- •Виды отношений
- •Реляционная база данных
- •Реляционная модель. Операции над данными
- •Реляционная алгебра
- •Пересечение отношений
- •Вычитание отношений
- •Декартово произведение отношений
- •Проекция
- •Выборка (ограничение)
- •Естественное соединение отношений
- •Деление
- •Реляционное исчисление
- •Примеры правильно построенных формул
- •Язык SQL
- •Отличие SQL от процедурных языков программирования
- •Формы и составные части SQL
- •Условия и терминология
- •Простейшие SELECT-запросы
- •Ограничения целостности в реляционной модели
- •Ограничения целостности уровня атрибута
- •Домены отношений
- •Отсутствующая информация или NULL-значения.
- •Ограничения целостности уровня кортежа
- •Ограничения целостности уровня отношения
- •Потенциальные, первичные, альтернативные ключи отношения
- •Потенциальные ключи и NULL-значения
- •Ограничения целостности уровня базы данных
- •Внешние ключи и NULL-значения
- •Правила ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Средства обеспечения целостности данных в СУБД
- •Поддержка декларативных ограничений целостности в языке SQL
- •Проектирование базы данных
- •Функциональная зависимость
- •Нормализация отношений базы данных
- •Нормальные формы
- •Декомпозиция без потерь и функциональные зависимости
- •Первая и вторая нормальные формы.
- •Третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Итоговая схема процедуры нормализации
- •Структуры хранения данных и методы доступа
- •Хранение отношений и доступ к хранимым данным
- •Индексирование
- •Управление транзакциями и целостность баз данных
- •Транзакции и параллелизм
- •Проблемы, возникающие при параллельном выполнении транзакций
- •Проблема потери результатов обновления
- •Проблемы несовместимого анализа
- •Несовместимый анализ – неповторяемое считывание
- •Несовместимый анализ – фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Конфликты между транзакциями
- •Методы сериализации транзакций
- •Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема несовместимого анализа. Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Уровни изоляции. Объекты синхронизационных блокировок
- •Предикатные синхронизационные блокировки
- •Метод временных меток
- •Уровни изоляции.
- •Синтаксис операторов SQL, определяющих уровни изоляции
175
14.5.Решение проблем параллелизма при помощи блокировок
Рассмотрим, как будут себя вести транзакции, вступающие в конфликт при доступе к данным, если они подчиняются приведенному выше протоколу доступа к данным.
Проблема потери результатов обновления
Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Транзакция А |
Время |
Транзакция В |
|
|
|
|
↓ |
--- |
Блокирует кортеж P S- |
t1 |
|
блокировкой |
↓ |
|
Чтение значения Р0 из кортежа P |
t 2 |
--- |
--- |
↓ |
|
t 3 |
Блокирует кортеж P S-блокировкой |
|
|
↓ |
(разрешена) |
--- |
t 4 |
Чтение значения Р0 из кортежа P |
Попытка X-блокировки кортежа Р |
↓ |
--- |
t 5 |
||
для его обновления отвергается |
↓ |
Попытка X-блокировки кортежа Р |
Ожидание снятия блокировки с |
t 6 |
|
кортежа Р |
↓ |
для его обновления отвергается |
Ожидание… |
t 5 |
Ожидание снятия блокировки с |
|
↓ |
кортежа Р |
Ожидание… |
t 6 |
Ожидание… |
Ожидание… |
↓ |
Ожидание… |
|
Как видно из приведенной схемы, обе транзакции успешно накладывают S-блокировки и получают доступ для чтения значения объекта Р. Для того, чтобы осуществить обновление объекта Р, транзакция А пытается наложить на него X-блокировку. Эта блокировка отвергается, т.к. объект Р уже заблокирован S-блокировкой, осуществленной транзакцией В. Транзакция А переходит в состояние ожидания до тех пор, пока транзакция В не освободит объект. Транзакция В, в свою очередь, также пытается для обновления значения объекта Р наложить на него X-блокировку. Эта блокировка также отвергается, так как объект Р уже заблокирован S-блокировкой транзакции А. Транзакция В
176
переходит в состояние ожидания, до тех пор пока объект Р не будет освобожден транзакцией А.
Врезультате обе транзакции находятся в состоянии ожидания друг друга
ине могут продолжаться и тем более завершиться. Возникла ситуация,
называемая тупиком (dead lock).
Проблема незафиксированной зависимости (чтение «грязных» данных, неаккуратное считывание)
Транзакция В изменяет данные в строке. После этого транзакция А читает измененные данные и работает с ними. Транзакция В откатывается и восстанавливает старые данные.
Транзакция А |
Время |
Транзакция В |
|
|
|
--- |
↓ |
Блокирует кортеж P S-блокировкой |
t1 |
||
--- |
↓ |
Чтение значения Р0 из кортежа P |
t 2 |
||
--- |
↓ |
|
t 3 |
Блокирует кортеж P X-блокировкой |
|
|
↓ |
(разрешена) |
--- |
t 4 |
Запись значения Р1 в кортеж P |
Попытка S-блокировки кортежа Р |
↓ |
--- |
t 5 |
||
для его обновления отвергается |
↓ |
Откат транзакции, т.е. |
Ожидание… |
t 6 |
|
|
восстановление значения Р0 |
|
|
↓ |
кортежа P |
|
|
(Блокировка объекта снимается) |
Блокирует кортеж P S-блокировкой |
t 7 |
--- |
(теперь разрешена) |
↓ |
--- |
Чтение значения Р0 из кортежа P |
t 8 |
|
Работа с прочитанными данными Р0 |
↓ |
--- |
t 9 |
||
--- |
↓ |
--- |
t 10 |
||
Фиксация транзакции |
↓ |
--- |
t 11 |
||
Все правильно |
↓ |
|
|
|
Результат.
Работа транзакции А была приостановлена до окончания (отката) транзакции В. После этого транзакция А продолжила работу В обычном режиме и работала с правильными данными. Конфликт разрешен за счет
177
некоторого увеличения времени работы транзакции А (потрачено время на ожидание снятия блокировки транзакцией В).
Проблема несовместимого анализа. Неповторяемое считывание
Транзакция А дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция В, которая изменяет значения в строке.
Транзакция А |
Время |
Транзакция В |
|
|
|
Блокирует кортеж P S-блокировкой |
↓ |
--- |
t1 |
||
Чтение значения Р0 из кортежа P |
↓ |
--- |
t 2 |
||
--- |
↓ |
|
t 3 |
Попытка X-блокировки кортежа P |
|
|
↓ |
отвергается |
--- |
t 4 |
Ожидание… |
Повторное чтение значения Р0 из |
↓ |
Ожидание… |
t 5 |
||
кортежа P |
↓ |
Ожидание… |
Фиксация транзакции |
t 6 |
|
(Блокировка объекта снимается) |
↓ |
|
--- |
t 7 |
Блокирует кортеж P X-блокировкой |
--- |
↓ |
(теперь она разрешена) |
t 8 |
Запись значения Р1 в кортеж P |
|
--- |
↓ |
Фиксация транзакции |
t 9 |
||
|
↓ |
и снятие блокировки |
Все правильно |
↓ |
|
|
|
Результат.
Работа транзакции В приостановилась до окончания транзакции А. В результате транзакция А дважды корректно читает одни и те же данные. После окончания транзакции А, транзакция В продолжила работу в обычном режиме.
178
Фиктивные элементы (фантомы)
Транзакция А дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция В, которая добавляет новую строку, удовлетворяющую условию отбора.
Транзакция А |
Время |
Транзакция В |
|
|
|
|
|
Блокирует S-блокировкой кортежи, |
↓ |
--- |
|
t1 |
|||
удовлетворяющие условию α |
↓ |
|
|
(заблокировано n строк) |
↓ |
--- |
|
Выборка кортежей, удовлетворяющих |
t 2 |
||
условию α (выбрано n строк) |
↓ |
|
|
--- |
t 3 |
Вставка нового кортежа, |
|
--- |
↓ |
удовлетворяющего условию α |
|
t 4 |
Фиксация транзакции |
||
Блокирует S-блокировкой кортежи, |
↓ |
--- |
|
t 5 |
|||
удовлетворяющие условию α |
↓ |
|
|
(заблокировано n+1 строка) |
|
||
↓ |
|
||
Выборка кортежей, удовлетворяющих |
--- |
||
t 6 |
|||
условию α (выбрано n+1 строк) |
↓ |
--- |
|
Фиксация транзакции |
t 7 |
||
и снятие блокировок |
↓ |
|
|
Появились кортежи, которых |
↓ |
|
|
|
|
||
раньше не было |
|
|
Результат.
Блокировка на уровне строк не решила проблему появления фиктивных элементов.