
- •Часть 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 Параллелизм
14.1. Введение
Как разъяснялось во введении к главе 13, восстановление данных и параллельное выполнение операций следует рассматривать совместно, поскольку обе эти темы являются частями более общей темы, связанной с обработкой транзакций. Однако в этой главе основное внимание уделяется именно параллелизму. Термин параллелизм означает возможность одновременной обработки в СУБД многих транзакций с доступом к одним и тем же данным, причем в одно и то же время. Как известной такой системе для корректной обработки параллельных транзакций без возникновения конфликтных ситуаций необходимо использовать некоторый метод управления параллелизмом. Ниже в этой главе приведены примеры конфликтных ситуаций, возможных при отсутствии соответствующего управления.
В общем данная глава имеет следующую структуру. Вначале рассматриваются некоторые проблемы, которые могут возникнуть при отсутствии должного управления параллелизмом. Затем вводится стандартный метод разрешения таких проблем, т.е. метод блокировки.
Замечание. Блокировка не является единственным возможным подходом в решении проблемы управления параллелизмом, но она, несомненно, чаще других встречается на практике. Некоторые другие подходы описаны в комментариях, приведенных в списке литературы.
Далее описывается, как можно использовать блокировку для решения проблем, о которых идет речь в начале главы. Однако с внедрением метода блокировки возникают другие проблемы; среди них наиболее известна проблема тупиковых ситуаций, которая и описывается ниже в этой главе. Затем описывается концепция способности к упорядочению, которая определяется как формальный критерий правильности выполнения некоторого набора параллельных транзакций. Потом продолжается рассмотрение некоторых важных уточнений основной идеи блокирования, а именно уровней изоляции и преднамеренной блокировки. Далее описывается, как используются перечисленные выше понятия в стандарте языка SQL. И наконец, приводится резюме и несколько заключительных замечаний.
Здесь также уместно привести общие замечания.
1. Во-первых, идеи параллелизма, как и идеи восстановления данных, в некоторой степени не зависят от того, является ли СУБД реляционной или какой-либо другой. Однако большая часть теоретической работы в этой области, как и в области восстановления данных, выполнялась именно в некотором специализированном реляционном контексте.
2. Во-вторых, параллелизм, как и восстановление данных, является весьма обширной темой, а потому в этой главе будут описаны только некоторые наиболее важные идеи. Кроме того, в упражнениях и ответах на них, а также в списке литературы в конце главы содержится обсуждение некоторых последних достижений в этой области знаний.
14.2. Три проблемы параллелизма
Прежде всего следует уточнить, что каждый метод управления параллелизмом предназначен для решения некоторой конкретной задачи. Тем не менее, при обработке правильно составленных транзакций возникают ситуации, которые могут привести к получению неправильного результата из-за взаимных помех среди некоторых транзакций. (Обратите внимание, что вносящая помеху транзакция сама по себе может быть правильной. Неправильный конечный результат возникает по причине бесконтрольного чередования операций из двух правильных транзакций. Более подробно смысл понятия "правильная транзакция" обсуждается далее в этой книге.) Основные проблемы, возникающие при параллельной обработке транзакций (далее они рассматриваются более подробно) следующие:
• проблема потери результатов обновления;
• проблема незафиксированной зависимости;
• проблема несовместимого анализа.
Проблема потери результатов обновления
Рассмотрим ситуацию, показанную на рис. 14.1, в такой интерпретации: транзакция A извлекает некоторый кортеж p в момент времени t1; транзакция В извлекает некоторый кортеж р в момент времени t2; транзакция А обновляет некоторый кортеж р (на основе значений, полученных в момент времени t1) в момент времени t3; транзакция В обновляет тот же кортеж р (на основе значений, полученных в момент времени t2, которые имеют те же значения, что и в момент времени //) в момент времени t4. Однако результат операции обновления, выполненной транзакцией А, будет утерян, поскольку в момент времени t4 она не будет учтена и потому будет "отменена" операцией обновления, выполненной транзакцией В.
Транзакция А |
Время |
Транзакция В |
|
|
- |
Извлечение кортежа p |
T1 |
- |
|
|
- |
- |
T2 |
Извлечение кортежа p |
|
|
- |
Обновление кортежа p |
T3 |
- |
|
|
- |
- |
T4 |
Обновление кортежа p |
Рис. 14.1. Потеря в момент времени t4 результатов обновления, выполненного транзакцией А
Проблема незафиксированной зависимости
Проблема незафиксированной зависимости появляется, если с помощью некоторой транзакции осуществляется извлечение (или, что еще хуже, обновление) некоторого кортежа, который в данный момент обновляется другой транзакцией, но это обновление еще не закончено. Таким образом, если обновление не завершено, существует некоторая вероятность того, что оно не будет завершено никогда. (Более того, в подобном случае может быть выполнен возврат к предыдущему состоянию кортежа с отменой выполнения транзакции.) В таком случае в первой транзакции будут принимать участие данные, которых больше не существует (в том смысле, что они "никогда" не существовали). Эта ситуация показана на рис. 14.2 и 14.3.
В первом примере (см. рис. 14.2) транзакция А в момент времени t2 встречается с невыполненным обновлением (оно также называется невыполненным изменением). Затем это обновление отменяется в момент времени t3. Таким образом, транзакция А выполняется на основе фальшивого предположения, что кортеж р имеет некоторое значение в момент времени t2, тогда как на самом деле он имеет некоторое значение, существовавшее еще в момент времени t1. В итоге после выполнения транзакции А будет получен неверный результат. Кроме того, обратите внимание, что отмена выполнения транзакции В может произойти не по вине транзакции В, а, например, в результате краха системы. (К этому времени выполнение транзакции А может быть уже завершено, а потому крушение системы не приведет к отмене выполнения транзакции A.)
Транзакция А |
Время |
Транзакция В |
|
|
- |
- |
T1 |
Обновление кортежа p |
|
|
- |
Извлечение кортежа p |
T2 |
- |
|
|
- |
- |
T3 |
Отмена вып. транзакции |
|
|
- |
Рис. 14.2. Транзакция А становится зависимой от невыполненного изменения в момент времени t2
Транзакция А |
Время |
Транзакция В |
|
|
- |
- |
T1 |
Обновление кортежа p |
|
|
- |
Обновление кортежа p |
T2 |
- |
|
|
- |
- |
T3 |
Отмена вып. Транзакции |
|
|
- |
Рис. 14.3. Транзакция А обновляет невыполненное изменение в момент времени t2, и результаты этого обновления утрачиваются в момент времени t3
Второй пример, приведенный на рис. 14.3, иллюстрирует более "ужасный" случай. Не только транзакция А становится зависимой от изменения, не выполненного в момент времени t2, но также в момент времени t3 фактически утрачивается результат обновления, поскольку отмена выполнения транзакции В в момент времени t3 приводит к восстановлению кортежа р к исходному значению в момент времени t1. Это еще один вариант проблемы потери результатов обновления.
Проблема несовместимого анализа
На рис. 14.4 показаны транзакции А и В, которые выполняются для кортежей со счетами (СЧЕТ). При этом транзакция А суммирует балансы, транзакция В производит перевод суммы 10 со счета 3 на счет 1. Полученный в итоге транзакции А результат 110, очевидно, неверен, и если он будет записан в базе данных, то в ней может возникнуть проблема несовместимости. В таком случае говорят, что транзакция А встретилась с несовместимым состоянием и на его основе был выполнен несовместимый анализ. Обратите внимание на следующее различие между этим примером и предыдущим: здесь не идет речь о зависимости транзакции А от транзакции В, так как транзакция В выполнила все обновления до того, как транзакция А извлекла СЧЕТ 3.