- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
15.4. Устранение трех проблем параллельности
Теперь можно вновь вернуться к рассмотрению трех проблем параллельности, опи- санных в разделе 15.2, и проанализировать, как они решаются с помощью механизма блокировок, предложенного в предыдущем разделе.
Проблема потери результатов обновления
На рис. 15.6 приведена новая версия процесса, представленного на рис. 15.1, которая из- менена в соответствии с требованиями протокола блокировки, описанного в разделе 15.3. Операция обновления для транзакции А в момент t3 не будет выполнена, поскольку она явля- ется неявным запросом на установку Х-блокировки для кортежа t. Однако этот запрос всту- пает в конфликт с S-блокировкой, уже установленной для данного кортежа транзакцией В. В результате транзакция А будет переведена в состояние ожидания. По аналогичным причинам транзакция В будет переведена в состояние ожидания в момент t4. Хотя в этом случае резуль- таты обоих обновлений утрачены не будут, решение данной проблемы с помощью механизма блокировки окажется возможным только при решении другой, вновь возникшей проблемы. Эта новая проблема называется взаимной блокировкой и обсуждается в разделе 15.5.
Транзакция А Время Транзакция В
- 4 -
- 4 - Извлечение кортежа t tl — (установка S-блокировки для t) 4 —
4 -
t2 Извлечение кортежа t
4 (установка S-блокировки для t)
- 1 - Обновление кортежа t t3 — (запрос Х-блокировки для кортежа t) 4 — Ожидание 4 —
Ожидание t4 Обновление кортежа t
Ожидание 4 (запрос Х-блокировки для кортежа t)
Ожидание 4 Ожидание
Ожидание 4 Ожидание
Рис. 15.6. Хотя обновления не утрачиваются, в момент Ы возникает взаимная блокировка
Проблема зависимости от незафиксированных результатов
На рис. 15.7 и 15.8 приведены измененные версии примеров, представленных на рис. 15.2 и 15.3 соответственно. Они демонстрируют чередование выполнения операций транзакций согласно описанному выше протоколу блокировки. Операция транзакции А в момент t2 (извлечение на рис. 15.7 и обновление на рис. 15.8) выполнена не будет. Суть в том, что она сопровождается выдачей неявного запроса на блокировку кортежа t и этот запрос вступает в конфликт с Х-блокировкой, уже установленной для данного кортежа транзакцией В. В результате транзакция А будет переведена в состояние ожидания, про- должающееся до тех пор, пока выполнение транзакции В не будет закончено (до фикса- ции или отката транзакции В). При этом установленная транзакцией В блокировка будет
снята и транзакция А сможет продолжить свое выполнение. Причем теперь транзакция А будет иметь дело уже с некоторым зафиксированным значением (либо существовавшим до начала выполнения транзакции В в случае ее отката, либо полученным после выпол- нения транзакции В). В любом случае транзакция А больше не зависит от незафиксиро- ванных результатов выполнения параллельной транзакции.
Транзакция А
Время
Транзакция В
Извлечение кортежа t
(установка S-блокировки для t)
Ожидание
Ожидание
Ожидание
Итог: извлечение кортежа t (установка S-блокировки для t)
I
tl
I
i
t2
4-
1
t3
4
t4
1
t
Обновление кортежа t (установка Х-блокировки для t)
Окончание или отмена выполнения (отмена Х-блокировки для t)
Рис. 15.7. Транзакция А не может получить доступ к незафиксированным результатам изменения кортежа t в момент t2
Транзакция А
Время
Транзакция В
Обновление кортежа t
(установка Х-блокировки для t)
Ожидание
Ожидание
Ожидание
Итог: обновление кортежа t (установка Х-блокировки для t)
I
I
tl
I
i
t2
i
1
t3
i
и
i I
Обновление кортежа t (установка Х-блокировки для t)
Окончание или отмена выполнения (отмена Х-блокировки для t)
Рис. 15.8. Транзакция А не может обновить незафиксированный результат изменения кортежа t в момент Ь2
Проблема несогласованной обработки данных
На рис. 15.9 приведена измененная версия примера, представленного на рис. 15.4. В новой версии чередование операций транзакций осуществляется в соответствии с протоколом бло- кировки, описанным в разделе 15.3. Операция обновления транзакции В в момент t6 выпол- нена не будет. Причина в том, что она предусматривает неявный запрос на установку X- блокировки для кортежа АСС 1, который вступает в конфликт с S-блокировкой этого кортежа, уже установленной транзакцией А. В результате транзакция В переводится в состояние ожида-
ния. Аналогично этому операция выборки транзакции А в момент t7 также выполнена не бу- дет. Суть в том, что она сопровождается выдачей неявного запроса на установку S- блокировки для кортежа АСС 3, а этот запрос вступает в конфликт с Х-блокировкой, уже уста- новленной для данного кортежа транзакцией В. В результате транзакция А также переводится в состояние ожидания. Можно сделать вывод, что хотя механизм блокировки и помогает ре- шить исходную проблему (а именно — проблему несогласованной обработки данных), одно- временно он приводит к возникновению другой проблемы (а именно — проблемы взаимной блокировки, которая обсуждается в следующем разделе).
АСС 1 40
АСС 2
50
АСС 3 30
Транзакция А
Время
Транзакция В
для
Извлечение кортежа АСС 1: (установка S-блокировки кортежа АСС 1) sum = 40
Извлечение кортежа АСС 2: (установка S-блокировки для кортежа АСС 2) sum = 90
Извлечение кортежа АСС 3: (установка S-блокировки для кортежа АСС 3) Ожидание Ожидание
I I
и
I
I
I
I
t2
i
i
i
i
t3
i
i
I
t4
i
I
I
I
t5
i
I
1
t6
I
i
i
tl
i
i
I
i
Извлечение кортежа АСС 3: (установка S-блокировки для кортежа АСС 3)
Обновление кортежа АСС 3: (установка Х-блокировки для кортежа АСС 3) 30 -» 20
Извлечение кортежа АСС 1: (установка S-блокировки для кортежа АСС 1)
Обновление кортежа АСС 1:
(установка Х-блокировки для
кортежа АСС 1)
Ожидание
Ожидание
Ожидание
Ожидание
Ожидание
Ожидание
Рис. J5.9. Проблема несогласованной обработки данных устраняется, но в момент tl возникает другая проблема — взаимная блокировка