- •Информация и данные
- •Основные понятия систем с базами данных
- •Пользователи информационной системы с БД
- •Требования к информационным системам с базами данных
- •Основные компоненты ИС с базами данных
- •Архитектура систем с базами данных. Понятие модели данных
- •Сущности и их свойства
- •Связи (отношения) между сущностями
- •Виды связей между сущностями
- •Еще о сущностях, их свойствах и связях между ними
- •Модели данных. Ранние подходы к организации баз данных
- •Основные понятия реляционной модели данных
- •Структуры данных реляционной модели. Реляционные отношения
- •Свойства отношений
- •Отсутствие в отношении одинаковых кортежей
- •Кортежи отношения не упорядочены (сверху вниз)
- •Атрибуты отношения не упорядочены (слева направо)
- •Значения всех атрибутов являются атомарными
- •Виды отношений
- •Реляционная база данных
- •Реляционная модель. Операции над данными
- •Реляционная алгебра
- •Пересечение отношений
- •Вычитание отношений
- •Декартово произведение отношений
- •Проекция
- •Выборка (ограничение)
- •Естественное соединение отношений
- •Деление
- •Реляционное исчисление
- •Примеры правильно построенных формул
- •Язык SQL
- •Отличие SQL от процедурных языков программирования
- •Формы и составные части SQL
- •Условия и терминология
- •Простейшие SELECT-запросы
- •Ограничения целостности в реляционной модели
- •Ограничения целостности уровня атрибута
- •Домены отношений
- •Отсутствующая информация или NULL-значения.
- •Ограничения целостности уровня кортежа
- •Ограничения целостности уровня отношения
- •Потенциальные, первичные, альтернативные ключи отношения
- •Потенциальные ключи и NULL-значения
- •Ограничения целостности уровня базы данных
- •Внешние ключи и NULL-значения
- •Правила ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Средства обеспечения целостности данных в СУБД
- •Поддержка декларативных ограничений целостности в языке SQL
- •Проектирование базы данных
- •Функциональная зависимость
- •Нормализация отношений базы данных
- •Нормальные формы
- •Декомпозиция без потерь и функциональные зависимости
- •Первая и вторая нормальные формы.
- •Третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Итоговая схема процедуры нормализации
- •Структуры хранения данных и методы доступа
- •Хранение отношений и доступ к хранимым данным
- •Индексирование
- •Управление транзакциями и целостность баз данных
- •Транзакции и параллелизм
- •Проблемы, возникающие при параллельном выполнении транзакций
- •Проблема потери результатов обновления
- •Проблемы несовместимого анализа
- •Несовместимый анализ – неповторяемое считывание
- •Несовместимый анализ – фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Конфликты между транзакциями
- •Методы сериализации транзакций
- •Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема несовместимого анализа. Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Уровни изоляции. Объекты синхронизационных блокировок
- •Предикатные синхронизационные блокировки
- •Метод временных меток
- •Уровни изоляции.
- •Синтаксис операторов SQL, определяющих уровни изоляции
14. Транзакции и параллелизм
14.1.Проблемы, возникающие при параллельном выполнении транзакций
Рассмотрим проблемы нарушения целостности данных, которые могут возникать при одновременном выполнении двух транзакций.
Имеются три основные проблемы параллелизма:
1)проблема потери результатов обновления;
2)проблема незафиксированной зависимости (чтение «грязных данных», неаккуратное считывание);
3)проблема несовместимого анализа.
Последняя проблема несовместимого анализа включает в себя еще три следующих варианта:
4)неповторяемое считывание;
5)фиктивные элементы (фантомы);
6)собственно несовместимый анализ. Рассмотрим, в чем эти проблемы состоят.
Проблема потери результатов обновления
Две транзакции по очереди записывают некоторые данные в один и тот же кортеж и затем фиксируют эти изменения.
Транзакция А |
Время |
Транзакция В |
|
|
|
Чтение кортежа Р |
↓ |
--- |
t1 |
||
--- |
↓ |
Чтение кортежа Р |
t 2 |
||
Запись значения Р1 в кортеж Р |
↓ |
--- |
t 3 |
||
--- |
↓ |
Запись значения Р2 в кортеж Р |
t 4 |
||
Фиксация транзакции |
↓ |
--- |
t 5 |
||
--- |
↓ |
Фиксация транзакции |
t 6 |
||
Результат: |
↓ |
|
|
|
|
Потеря результатов обновления |
|
|
166
Результат.
После окончания обеих транзакций, кортеж Р содержит значение Р2, занесенное более поздней транзакцией В. Транзакция А ничего не знает о существовании транзакции В, и естественно ожидает, что в строке Р содержится значение Р1.Таким образом, транзакция А потеряла результаты своей работы.
Проблема незафиксированной зависимости (чтение «грязных данных», неаккуратное считывание)
Транзакция В изменяет данные в кортеже Р. После этого транзакция А читает измененные данные и работает с ними. Транзакция В откатывается и восстанавливает старые данные.
Транзакция А |
Время |
Транзакция В |
|
|
|
--- |
↓ |
Чтение значения Р0 из кортежа Р |
t1 |
||
--- |
↓ |
Запись значения Р1 в кортеж Р |
t 2 |
||
Чтение значения Р1 из кортежа Р |
↓ |
--- |
t 3 |
||
Работа с прочитанными данными Р1 |
↓ |
--- |
t 4 |
||
--- |
↓ |
Откат транзакции (восстановление |
t 5 |
||
|
↓ |
значения Р0 кортежа Р) |
Фиксация транзакции |
t 6 |
--- |
Результат: |
↓ |
|
|
|
|
Работа с «грязными» данными |
|
|
Спрашивается: «С какими же данными работала транзакция А?»
Результат.
Получилось так, что транзакция А использовала данные, которых не только нет в базе данных после окончания транзакции, но, и не было в базе данных до ее начала. Действительно, после отката транзакции В, должна восстановиться ситуация, как если бы транзакция В вообще никогда не выполнялась. Таким образом, результаты работы транзакции А явно некорректны, т.к. она работала с данными, отсутствовавшими в базе данных.
167
Проблемы несовместимого анализа
Проблема несовместимо анализа включает в себя несколько различных вариантов:
1)неповторяемое считывание;
2)фиктивные элементы (фантомы);
3)собственно несовместимый анализ.
Несовместимый анализ – неповторяемое считывание
Транзакция А дважды читает одну и ту же строку. Между этими чтениями вклинивается транзакция В, которая изменяет значения в строке.
Транзакция А |
Время |
Транзакция В |
|
|
|
Чтение из кортежа P значения Р0 |
↓ |
--- |
t1 |
||
--- |
↓ |
Чтение из кортежа P значения Р0 |
t 2 |
||
--- |
↓ |
Запись в кортеж P значения Р1 |
t 3 |
||
--- |
↓ |
Фиксация транзакции |
t 4 |
||
Повторное чтение кортежа P |
↓ |
--- |
t 5 |
||
(уже значения Р1) |
↓ |
|
Фиксация транзакции |
t 6 |
--- |
Результат: |
↓ |
|
|
|
|
Неповторяемое считывание |
|
|
Транзакция А ничего не знает о существовании транзакции В, и, так как сама она не меняет значение в данном кортеже, то, очевидно, ожидает, что после повторного чтения значение будет тем же самым, то есть Р0.
Результат.
Транзакция А работает с данными, которые, с ее точки зрения,
самопроизвольно изменяются.
168
Несовместимый анализ – фиктивные элементы (фантомы)
Эффект фиктивных элементов несколько отличается от предыдущих транзакций тем, что здесь за один шаг выполняется достаточно много операций, а именно, чтение нескольких кортежей, удовлетворяющих некоторому условию.
Транзакция А дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция В, которая добавляет новую строку, удовлетворяющую условию отбора.
Транзакция А |
Время |
Транзакция В |
|
|
|
Выборка кортежей, удовлетворяющих |
↓ |
--- |
t1 |
||
условию а. (Отобрано n строк) |
↓ |
Вставка нового кортежа, |
--- |
t 2 |
|
|
↓ |
удовлетворяющего условию а |
--- |
t 3 |
Фиксация транзакции |
Выборка кортежей, удовлетворяющих |
↓ |
--- |
t 4 |
||
условию а. (Отобрано уже n+1 строк) |
↓ |
|
Фиксация транзакции |
t 5 |
--- |
|
↓ |
|
Результат:
Появился кортеж, которого раньше не было
Транзакция А ничего не знает о существовании транзакции В, и, так как сама она ничего не меняет в базе данных, то, следовательно ожидает, что после повторного отбора будут отобраны те же самые n строк.
Результат.
Транзакция А в двух последовательных одинаковых выборках строк вопреки очевидным ожиданиям получала разные результаты. При повторной выборке появился дополнительный (n+1)-й кортеж – кортеж-фантом.
Собственно несовместимый анализ
Эффект собственно несовместимого анализа также отличается от предыдущих примеров тем, что в смеси присутствуют две транзакции – одна длинная, другая короткая.
Пусть длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера. Пусть на всех счетах находятся одинаковые суммы, например, по 100 руб. Короткая транзакция в этот момент выполняет перевод 50 руб. с одного счета на другой так, что общая сумма по всем счетам не меняется.