- •Часть IV
- •Глава 13 Восстановление
- •13.1. Введение
- •13.2. Транзакции
- •13.3. Восстановление транзакции
- •13.4. Восстановление системы
- •13.5. Восстановление носителей
- •13.6. Двухфазная фиксация
- •13.7. Поддержка языка sql
- •13.8. Резюме
- •Глава 14 Параллелизм
- •14.1. Введение
- •14.2. Три проблемы параллелизма
- •14.3. Блокировка
- •14.4. Решение проблем параллелизма
- •14.5. Тупиковая ситуация
- •14.6. Способность к упорядочению
- •14.7. Уровни изоляции
- •14.8. Преднамеренная блокировка
- •IX s
- •14.9. Поддержка блокировок в sql
- •14.10. Резюме
- •14.13. Papadimitriou с. The Theory of Database Concurrency Control.— Rockville, Md.: Computer Science Press, 1986.
- •Глава 15 Безопасность
- •15.1. Введение
- •15.2. Общие соображения
- •15.3. Избирательное управление доступом
- •15.4. Модификация запроса
- •15.5. Обязательное управление доступом
- •15.6. Шифрование данных
- •Стандарт шифрования данных
- •15.7. Поддержка мер обеспечения безопасности в языке sql
- •15.8. Резюме
14.3. Блокировка
Как упоминалось в начале главы, описанные выше проблемы могут быть разрешены с помощью методики управления параллельным выполнением процессов под названием блокировка. Ее основная идея очень проста: в случае, когда для выполнения некоторой транзакции необходимо, чтобы некоторый объект (обычно это кортеж базы данных) не изменялся непредсказуемо и без ведома этой транзакции (как это обычно бывает), такой объект блокируется. Таким образом, эффект блокировки состоит в том, чтобы "заблокировать доступ к этому объекту со стороны других транзакций", а значит, предотвратить непредсказуемое изменение этого объекта. Следовательно, первая транзакция в состоянии выполнить всю необходимую обработку с учетом того, что обрабатываемый объект остается в стабильном состоянии настолько долго, насколько это нужно.
Счет 1 40 |
Счет 2 50 |
Счет 3 30 |
- |
/ |
- |
- |
/ |
- |
Извлечение кортежа СЧЕТ 1: |
T1 |
- |
SUM=40 |
/ |
- |
- |
/ |
- |
Извлечение кортежа СЧЕТ 2: |
T2 |
- |
SUM=90 |
/ |
- |
- |
T3 |
Извлечение кортежа СЧЕТ 3: |
- |
/ |
- |
- |
T4 |
Обновление кортежа СЧЕТ 3: |
- |
/ |
30->20 |
- |
/ |
- |
- |
T5 |
Извлечение кортежа СЧЕТ 1: |
- |
/ |
- |
- |
T6 |
Обновление кортежа СЧЕТ 1: |
- |
/ |
40->50 |
- |
/ |
- |
- |
T7 |
Завершение вып транз. |
- |
/ |
|
- |
/ |
|
Извлечение кортежа СЧЕТ 3: |
T8 |
|
SUM=110 |
|
|
Рис. 14.4. Транзакция А выполнила несовместимый анализ
Ниже функционирование блокировки описано более подробно.
1. Прежде всего, предположим, что в системе поддерживается два типа блокировок: блокировка без взаимного доступа (монопольная блокировка), называемая Х-блокировкой (X locks — exclusive locks), и блокировка с взаимным доступом, называемая S-блокировкой (S locks — Shared locks). Замечание. Х- и S-блокировки иногда называют блокировками записи и чтения соответственно. Здесь предполагается, что Х- и S-блокировки единственно возможные, хотя ниже в этой главе приводятся примеры блокировок других типов. Кроме того, допустим, что в данном случае кортежи являются единственным типом "блокируемого объекта", хотя опять же ниже описаны примеры других типов таких объектов.
2. Если транзакция А блокирует кортеж р без возможности взаимного доступа (Х-блокировка), то запрос другой транзакции В с блокировкой этого кортежа p будет отменен.
3. Если транзакция А блокирует кортеж р с возможностью взаимного доступа (S-блокировка), то
• запрос со стороны некоторой транзакции В на Х-блокировку кортежа будет отвергнут;
• запрос со стороны некоторой транзакции В на S-блокировку кортежа р будет принят (т.е. транзакция В также будет блокировать кортеж р с помощью S-блокировки).
Эти правила можно наглядно представить в виде матрицы совместимости, показанной на рис. 14.5, и интерпретировать ее следующим образом. Рассмотрим некоторый кортеж р и предположим, что транзакция А блокирует кортеж р различными типами блокировки (это обозначено соответствующими символами S и X, а отсутствие блокировки — прочерком). Предположим также, что некоторая транзакция В запрашивает блокировку кортежа p, что обозначено в первом слева столбце матрицы на рис. 14.5 (для полноты картины в таблице также приведен случай отсутствия блокировки"). В других ячейках матрицы символ N обозначает конфликтную ситуацию (запрос со стороны транзакции В не может быть удовлетворен, и сама эта транзакция переходит в состояние ожидания), a Y — полную совместимость (запрос со стороны транзакции В удовлетворен). Очевидно, что эта матрица является симметричной.
|
X
|
S
|
-
|
X
|
N
|
N
|
Y
|
S
|
N
|
Y
|
Y
|
-
|
Y
|
Y
|
Y
|
Рис. 14.5. Матрица совместимости для Х- и S-блокировки
Теперь следует ввести протокол доступа к данным, который на основе введения только что описанных Х- и S-блокировки позволяет избежать возникновения проблем параллелизма (описанных выше в этой главе).
1. Транзакция, предназначенная для извлечения кортежа, прежде всего должна наложить S-блокировку на этот кортеж.
2. Транзакция, предназначенная для обновления кортежа, прежде всего должна наложить Х-блокировку на этот кортеж. Иначе говоря, если, например, для последовательности действий типа извлечение/обновление для кортежа уже задана S-блокировка, то ее необходимо заменить Х-блокировкой.
Замечание. Блокировки в транзакциях обычно задаются неявным образом: например, запрос на "извлечение кортежа" является неявным запросом с S-блокировкой, а запрос на "обновление кортежа" — неявным запросом с Х-блокировкой соответствующего кортежа. При этом под термином "обновление" (как и ранее) подразумеваются помимо самих операций обновления также операции вставки и удаления. При строгом описании протокола возможны небольшие отличия, связанные с операциями вставки и удаления, однако здесь они будут опущены.
3. Если запрашиваемая блокировка со стороны транзакции В отвергается из-за конфликта с некоторой другой блокировкой со стороны транзакции А, то транзакция В переходит в состояние ожидания. Причем транзакция В будет находиться в состоянии ожидания до тех пор, пока не будет снята блокировка, заданная транзакцией А.
Замечание. В системе обязательно должны быть предусмотрены способы устранения бесконечно долгого состояния ожидания транзакции В (это состояние обычно называется зависанием). Самым простым способом может служить организация обработки запросов на блокировку в очередности "первым поступил — первым обработан".
4. Х-блокировки сохраняются вплоть до конца выполнения транзакции (до операции "завершение выполнения" или "отмена выполнения"). S-блокировки также обычно сохраняются вплоть до этого момента, однако при работе с ними следует учесть замечания, которые излагаются несколько ниже в этой главе.