
- •Файл-серверные приложения
- •3. Представления
- •5. Определение триггера в стандарте языка sql
- •Типы триггеров
- •6. Понятие хранимой процедуры
- •Типы хранимых процедур
- •7. Табличные переменные
- •Функции пользователя
- •8. Понятие курсора
- •Вложенные транзакции
- •10. Параллельная работа транзакций
- •Работа транзакций в смеси
- •Проблемы параллельной работы транзакций
- •Проблема потери результатов обновления.
- •Проблема незафиксированной зависимости (чтение "грязных" данных).
- •Проблема несовместимого анализа данных.
- •11. 1. Проблема потери результатов обновления
- •12. Проблема незафиксированной зависимости (чтение "грязных" данных)
- •13. 3.1. Неповторяемое считывание
- •14. Фиктивные элементы (фантомы)
- •15. Несовместимый анализ данных
- •16. Конфликты между транзакциями
- •17. Модель конфликтов транзакций. Граф предшествования
- •18. Типы блокировок.
- •19. Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема незафиксированной зависимости (чтение "грязных" данных)
- •Проблема несовместимого анализа Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Несовместимый анализ данных
- •Разрешение тупиковых ситуаций
- •20.Разрешение тупиковых ситуаций. Граф ожидания.
- •21.Назначение многомерных бд. Структурные компоненты многомерной модели.
- •Основные преимущества многомерных субд
- •22. Агрегация данных в многомерных базах данных.
- •Существует частичная и полная агрегация.
- •24. Организация запросов средствами языка mdx.
Вложенные транзакции
Свойство Д (долговечность) также не является абсолютными свойством, т.к. некоторые системы допускают вложенные транзакции. Если транзакция Б запущена внутри транзакции А, и для транзакции Б выполнена команда COMMIT, то фиксация данных транзакции Б является условной, т.к. внешняя транзакция А может откатиться. Результаты работы внутренней транзакции Б будут окончательно зафиксированы только если будет зафиксирована внешняя транзакция А.
Вложенными называются транзакции, выполнение которых инициируется из тела уже активной транзакции.
Для создания вложенной транзакции не нужны какие-либо дополнительные команды. Новая транзакция начинается с открытой предыдущей. Завершение транзакции верхнего уровня откладывается до завершения вложенных транзакций. Если транзакция самого нижнего (вложенного) уровня завершена неудачно и отменена, то все транзакции верхнего уровня, включая транзакцию первого уровня, будут отменены.
10. Параллельная работа транзакций
Свойство И (изоляция) также не всегда выполняется в полном объеме. В идеале, транзакции разных пользователей не должны мешать друг другу (т.е. они должны выполняться так, чтобы у пользователя создавалась иллюзия, что он в системе один).
Простейший способ обеспечить абсолютную изолированность состоит в том, чтобы выстроить транзакции в очередь и выполнять их строго одну за другой. Очевидно, при этом теряется эффективность работы системы. Таким образом, транзакции необходимо выполнять одновременно, но так, чтобы результат был бы такой же, как и при выполнении их по очереди.
При этом трудность состоит в том, что если не предпринимать никаких дополнительных мер, то данные, измененные одним пользователем, могут быть изменены транзакцией другого пользователя раньше, чем закончится транзакция первого пользователя. В результате, в конце транзакции первый пользователь увидит некорректные результаты своей работы.
Работа транзакций в смеси
Атомарность отдельной транзакции состоит в том, что СУБД гарантирует, что, с точки зрения пользователя, будут выполнены два условия:
Эта операция будет выполнена целиком или не выполнена вовсе (атомарность - все или ничего).
Во время выполнения этой операции не выполняются никакие другие операции других транзакций (строгая очередность элементарных операций).
Определение. Набор из нескольких транзакций, элементарные операции которых чередуются друг с другом, называется смесью транзакций.
Определение. Последовательность, в которой выполняются элементарные операции заданного набора транзакций, называется графиком запуска набора транзакций.
Проблемы параллельной работы транзакций
Различают три основные проблемы параллелизма:
Проблема потери результатов обновления.
Проблема незафиксированной зависимости (чтение "грязных" данных).
Проблема несовместимого анализа данных.
11. 1. Проблема потери результатов обновления
Считается, что передача обработки элементарных операций нескольких транзакций происходит в момент освобождения процессора (например, при записи или чтения данных из внешней памяти).
Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
Время |
Транзакция A |
Транзакция B |
|
Чтение
|
--- |
|
Запись
|
--- |
|
--- |
Чтение |
|
--- |
Запись
|
|
COMMIT |
--- |
|
--- |
COMMIT |
|
Потеря результата обновления |
|
Результат.
После окончания обеих транзакций, строка
содержит значение
,
занесенное более поздней транзакцией
B. Транзакция A ничего не знает о
существовании транзакции B, и ожидает
в строке
значение
.
Таким образом, транзакция A потеряла
результаты своей работы.