Введение в системы БД (542480), страница 149
Текст из файла (страница 149)
Все эти проблемы возникают из-за того, что график запуска не является упорядоченным, т.е. он не эквивалентен некоторому последовательному графику запуска этих же транзакций. Наиболее распространенным методом разрешения указанных проблем является использование механизма блокировки. Существует два основных типа блокнровок: разделяемая (Я-блокировка) н эксклюзивная (Х-блокировка).
Если транзакция устанавливает Б-блокировку для некоторого объекта, то другие транзакции также смогут установить Я-блокировку для этого же объекта, однако установить для него Х- блокировку им не удастся. Если одна транзакция устанавливает Х-блокировку для некоторого объекта, то никакая другая транзакция не сможет установить лля этого объекта никакой другой блокировки. Специальный протокол использования этих блокировок позволяет устранить упомянутую выше проблему утраты результатов обновления и другие возможные проблемы. В соответствии с данным протоколом Я- блокировка устанавливается дпя всех считываемых объектов, а Х-блокировка — для всех обновляемых объектов, причем все установленные блокировки сохраняются до окончания выполнения транзакции.
С помощью этого протокола можно обеспечить упорядоченность графика выполнения транзакций. Описанный протокол является более строгой (и более общей) формой протокола двухфазной блокировки. В теореме двухфазной блокировки утверждается, что если выполнение всех транзакций подчиняется этому протоколу, то любой из возможных графиков запуска будет упорядоченным. При построении такого графика запуска гарантируется, что если а и В являются двумя транзакциями данного графика, то либо транзакция й получит доступ к результатам выполнения транзакции й, либо транзакция В получит доступ к результатам выполнения транзакции а.
К сожалению, применение протокола двухфазной блокировки способно привести к возникновению ситуации взаимной блокировки. Для ее устранения следует выбрать одну из конфликтующих транзакций в качестве транзакции-жертвы и отменить ее с выполнением отката всех внесенных ею изменений.
В общем случае нельзя гарантировать безопасность выполнения набора транзакций, если используемый график не полностью упорядочен. Однако в некоторых системах для повышения их производительности и пропускной способности предусмотрена возможность чередующегося выполнения нескольких транзакций с некоторым установленным уровнем изоляции, что на самом деле является не совсем безопасным решением. В этой главе был описан один такой "небезопасный уровень", т.е. уровень стабильности курсора (с точки зрения терминологии, принятой в СУБД РВ2, хотя в стандарте языка ЗОЬ аналогичный уровень называется ИЕао СОИИ1ТТЕ0).
Далее вкратце было рассмотрено понятие степень детализации блокнровок и связанная с ним идея блокировки намерения. Предполагается, что перед установкой транзакцией блокировки определенного типа для некоторого элемента, например для кортежа базы данных, ей следует установить соответствующую блокировку 585 Глава 15. Параллвльноет ь намерения для "родительского" объекта этого элемента (в случае кортежа — для переменной-отношения, в которой кортеж содержится). На практике блокировки намерения обычно устанавливаются так же, как 5- и Х-блокировки кортежей, т.е. неявным образом. Однако рекомендуется предусмотреть оператор типа БОСЕ для явной установки (в случае необходимости) блокировок более сильных, чем те, которые устанавливаются системой неявно.
Наконец, в этой главе были кратко описаны средства управления параллельностью, предусмотренные в языке БО) . В стандарте языка БЯ). средства явной установки блокировки не предусмотрены вовсе, однако в нем поддерживаются различные уровни изоляции 1ЯЕК1АБ11АВЬЕ, КЕРЕАТАВЬЕ КЕАП, КЕЙП СОИИ1ТТЕП, КЕАП ОИСОИИ1ТТЕП), которые в СУБД обычно реализуются средствами неявного автоматического блокирования.
В заключение этой части книги следует сделать краткое замечание о важности ограничений целостности. Корректность базы данных в широком понимании означает то, что она не противоречит никаким известным ограничениям целостности. Отсюда понятно, что для системы без поддержки таких ограничений целостности не имеет смысла говорить о корректности ее базы данных.
В главе 14 уже шла речь о том, что восстановление означает возврат к предыдущему корректному состоянию, а в этой главе упоминалось о том, что параллельность (или, точнее, управление параллельностью) означает, что при использовании упорядоченного графика запуска база данных переводится каждой транзакцией из одного корректного состояния в другое корректное состояние.
Отсюда следует, что понятие целостности является более фундаментальным, чем понятие восстановления или параллельности. Действительно, понятие целостности имеет очень глубокий смысл даже в однопользовательской системе. Упражнения 15.1. Дайте определение понятия упарлдачиваемасти. 15.2. Дайте подробное описание: а) протокола двухфазной блокировки; б) теоремы двухфазной блокировки. 15.3. Пусть даны транзакции Т1, Т2 и ТЗ, которые выполняют следующие операции: Т1: добавить 1 к А; Т2: удвоить значение А; ТЗ: вывести значение А на экран, а затем поместить в А значение 1 (здесь А — некоторый объект базы данных). а) Допустим, что транзакции Т1, Т2 и ТЗ выполняются параллельно. Перечислите все возможные результаты нх выполнения, если начальное значение А равно нулю.
б) Допустим, что транзакции Т1, Т2 и ТЗ имеют показанную ниже внутреннюю структуру. 586 Часть |)л управление транзакйиями Сколько возможных графиков запуска существует, если эти транзакции выполняются без каких-либо блокировок? в) Существуют ли какие-либо чередующиеся графики запуска, которые для заданного начального значения А 1нуль) приводят к получению "корректного'* результата, но не допускают упорядочения? г) Существуют ли какие-либо графики запуска, которые действительно допускают упорядочение, но не могут быть реализованы, если все три транзакции подчиняются протоколу двухфазной блокировки? 15.4.
Ниже приведена последовательность выполнения различных событий в графике запуска с транзакциями Т1, Т2, ..., Т12 и объектами базы данных А, В, ..., Н. Время 80 Время 81 (Т1) : КЕТй1ЕЧЕ А ; Время 82 (Т2) : КЕТК1ЕЧЕ В (Т1) : КЕТВ1ЕЧЕ С (Т4) КЕТК1ЕЧЕ О (Т5) КЕТК1ЕЧЕ А; (Т2) КЕТК1ЕЧЕ Е (Т2) НРОАТЕ Е (ТЗ) : йЕТК1ЕЧЕ Р ; (Т2) : КЕТК1ЕЧЕ Р (Т5) ОРОАТЕ А; (Т1) : соиитт (Тб) ; КЕТК1ЕЧЕ А , (Т5) : йоььВАск ; (Тб) : КЕТК1ЕЧЕ С (Тб) с ОРОАТЕ С ) (Т7) : КЕТй1ЕЧЕ О (Т8) : КЕТК1ЕЧЕ Н (Т9) КЕТКТЕЧЕ 0 (Т9) ОРОАТЕ 0 (Т8) КЕТК1ЕЧЕ Е (Т7) : соиитт ; (Т9) КЕТК1ЕЧЕ Н (ТЗ) 1 КЕТКТЕЧЕ 6 ) (Т10) : КЕТК1ЕЧЕ А ; (Т9) : НРОАТЕ Н (Тб) СОИИХТ (Т11) : КЕТК1ЕЧЕ С ) Глава 15.
Параллельность 587 Время Ьп Предположим, что для выполнения оператора КЕТК1ЕЧЕ К (считать К) требуется (в случае успеха) установить Б-блокировку лля объекта К, а для выполнения операто- ра БРВАТЕ К (обновить К) требуется (в случае успеха) установить для объекта К Х- блокировку. Допустим, что все блокировки сохраняются до конца выполнения транзакции. Возникнет ли ситуация взаимной блокировки к моменту Ьп? Еще раз обратимся к проблемам параллельности, представленным на рис.
15.1- 15.5. 15.4. Что произойдет в каждом из этих случаев, если все транзакции будут вы- полняться на уровне изоляции "Повторяемость считывания", а не на уровне "Стабильность курсора"? Дайте формальные и неформальные определения пяти типам блокировок: Х, Б,!Х, 15.6 15, 5!Х. Сформулируйте понятие относительной силы блокировок и нарисуйте соответст- вующую диаграмму их приоритета. Сформулируйте определение протокола блокировки намерения, а также поясните основное назначение этого протокола. В стандарте языка БОЬ определяются три проблемы параллельности: некоррект- ное чтение, неповторяачое чтение и чтение фанточов.
Как онн соотносятся с тремя проблемами параллельности, описанными в начале этой главы (потери ре- зультатов обновления, зависимости от незафиксированных результатов и несогла- сованной обработки данных)? 15.7 15.8 15.9 15.10.Кратко опишите механизм реализации многовариантного протокола управления параллельностью, обсуждаемого в комментарии к (! 5.1). Список литературы В этом списке следовало бы также упомянуть работы (14.2], (!4.!О) и особенно (14.!2) из главы !4. Вауег К., Не!!ег М., Кейег А. Рага1!е1Вш апд Кесочегу )п ОагаЬазе 5уягешз l~ АСМ ТОПЯ. — )цпе, ! 980. — 5, № 2. Как уже говорилось в главе 14, новые прикладные области (например, проекти- рование и разработка программного и аппаратного обеспечения) часто выдвига- ют сложные требования к обработке данных, которые нельзя полностью удовле- творить с помошью классических схем управления выполнением транзакций, описанных в этой и предыдушей главах.