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