- •Глава 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.5. Взаимная блокировка
Как было показано выше, механизм блокировки можно использовать для разрешения трех основных проблем, возникающих при параллельной обработке кортежей транзак- циями. К сожалению, использование блокировок приводит к возникновению другой про- блемы— взаимной блокировке транзакций. Выше были приведены два примера по- добных ситуаций. На рис. 15.10 показана обобщенная схема возникновения данной про- блемы, на которой rl и г2 представляют любые блокируемые объекты, необязательно являющиеся кортежами базы данных (подробности приводятся в разделе 15.8), а выра- жения типа "блокировка... без совместного доступа" обозначают любые операции уста- новки блокировки (без совместного доступа), заданные как явно, так и неявно.
Транзакция А |
Время |
—- |
1 |
— |
1 |
Блокировка rl без совместного |
tl |
доступа |
1 |
— |
1 |
— |
t2 |
— |
I |
— |
i |
Блокировка Г 2 без совместного |
t3 |
доступа |
J. |
Ожидание |
i |
Ожидание |
t4 |
Ожидание |
i |
Ожидание |
i |
Ожидание |
i |
Транзакция В
Блокировка r2 без совместного доступа
Блокировка rl без совместного
доступа
Ожидание
Ожидание
Рис. 15.10. Схема возникновения взаимной блокировки
Взаимная блокировка имеет место в том случае, когда две или более транзакций од- новременно находятся в состоянии ожидания, причем для продолжения работы каждая из них ожидает прекращения выполнения другой транзакции3. На рис. 15.10 показана взаимная блокировка для двух транзакций, однако, в принципе, возможны ситуации вза- имной блокировки с участием трех, четырех и более транзакций. Тем не менее прове- денные с системой System R эксперименты показали, что на практике ситуации взаимной блокировки с участием более двух транзакций почти никогда не встречаются [15.4].
3Иногда
в литературе ситуация взаимной
блокировки упоминается под названием
"тупико-
вая ситуация ".
Замечание. На практике не все существующие системы контролируют появление именно ситуаций взаимных блокировок. Например, в некоторых из них организуется простой хронометраж выполнения транзакций и решение о возникновении ситуации вза- имной блокировки принимается в каждом случае, когда транзакция не завершает свою работу в пределах некоторого заранее предписанного ей интервала времени.
Обратите внимание, что транзакция-жертва признается "неудачной" и ее откат вы- полняется не по ее собственной вине. В одних системах предусмотрен автоматический перезапуск этой транзакции в предположении, что обстоятельства, которые привели к возникновению взаимной блокировки, вновь не повторятся. В других системах в про- грамму, связанную с остановленной транзакцией, просто посылается сообщение об имевшей место ситуации взаимной блокировки, после чего вся остальная обработка ошибки возлагается на саму эту программу. С точки зрения прикладного программиста, первый из подходов, безусловно, предпочтительнее. Тем не менее решать данную про- блему всегда рекомендуется, учитывая точку зрения пользователя.