Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

15.7. Уровни изоляции

Грубо говоря, термин уровень изоляции используется для описания степени вме- шательства параллельно выполняющихся транзакций в работу некоторой заданной транзакции. Однако для гарантированной упорядоченности используемых графиков за-

пуска нельзя допускать никакого постороннего вмешательства! Иначе говоря, уровень изоляции должен быть максимальным. Тем не менее, как уже отмечалось в конце преды- дущего раздела, в реальных системах по различным причинам обычно допускаются транзакции, которые работают на уровне изоляции ниже максимального.

Замечание. Уровень изоляции обычно рассматривается как некоторое свойство тран- закции. В действительности нет никаких причин, по которым транзакция в одно и то же время не могла бы работать с различными уровнями изоляции для разных частей базы данных. Однако из соображений простоты здесь уровень изоляции будет рассматривать- ся всего лишь как некоторое свойство транзакции.

Теоретически можно определить по крайней мере пять уровней изоляции. Однако в [15.9], а также в стандарте языка SQL их всего четыре, тогда как СУБД DB2 фирмы IBM поддержи- вает только два уровня. Вообще говоря, чем выше уровень изоляции, тем меньше степень возможного взаимного влияния транзакций (и ниже уровень параллельности), и чем ниже уровень изоляции, тем больше степень возможного взаимного влияния транзакций (и выше уровень параллельности работ в системе). В качестве примера рассмотрим два уровня изоля- ции, поддерживаемых СУБД DB2. Они называются уровнями стабильности курсора и по- вторяемости считывания. Уровень повторяемости считывания (ПС) является максималь- ным уровнем изоляции; причем если все транзакции выполняются на этом уровне, то графики запуска являются упорядоченными (выше в настоящей главе по умолчанию полагалось, что все транзакции выполняются именно на этом уровне изоляции). Уровень стабильности кур- сора (СК) для транзакции Tl характеризуется следующими особенностями:

  • транзакция адресуется некоторому кортежу t5;

  • это действие сопровождается установкой блокировки для кортежа t;

  • адресуемость кортежу t отменяется без его обновления;

  • в результате уровень Х-блокировки не достигается;

  • подобная блокировка может быть снята без необходимости ожидания окончания выполнения транзакции.

Обратите внимание, что в этом случае другая транзакция Т2 уже сможет выполнить обновление кортежа t и зафиксировать изменения. Если транзакция Т1 вновь обратится к кортежу t, эти изменения окажутся ей доступны, что в конечном счете может вызвать перевод базы данных в противоречивое состояние. В противоположность этому при ис- пользовании уровня изоляции ПС все блокировки кортежей (а не только Х-блокировки) должны сохраняться до окончания выполнения транзакции, поэтому упомянутой выше проблемы не возникает.

Здесь следует сделать важные дополнения.

5 Эта операция выполняется посредством установки курсора в положение, соответствую- щее требуемому кортежу (подробнее об этом речь шла в главе 4); отсюда и название уровня изоляции: "уровень стабильности курсора". Следует уточнить, что в СУБД DB2 блокировка Т1, установленная для кортежа t, является блокировкой для обновления (V-блокировкой), а не разде- ляемой блокировкой (S-блокировкой) [4.20].


1. Описанная проблема — не единственная из числа проблем, которые могут возникнуть на уровне изоляции СК; просто ее легче всего объяснить. Однако она, к сожалению, по- зволяет сделать вывод, что уровень изоляции ПС необходим только в тех сравнительно

маловероятных случаях, когда данная транзакция дважды обращается к одному и тому же кортежу. Тем не менее существуют весомые аргументы в защиту повсеместного ис- пользования уровня изоляции ПС вместо уровня СК. Дело в том, что выполнение тран- закции на уровне СК не является двухфазным, а потому (как разъяснялось в предыду- щем разделе) упорядоченность используемых в этом случае графиков не гарантируется. В качестве контраргумента следует указать тот факт, что на уровне изоляции СК в рабо- те системы достигается более высокий уровень параллельности в сравнении с уровнем изоляции ПС (такая ситуация возможна, но вовсе не обязательна).

2. Реализация, поддерживающая любой иной уровень изоляции, кроме максимально- го, обычно включает те или иные средства явного управления уровнем параллель- ности. Обычно для этого используется явное указание операторов блокировки LOCK, что позволяет разработчикам создавать свои приложения таким образом, чтобы гарантировать необходимую безопасность и при отсутствии гарантий со стороны самой системы. Например, в СУБД DB2 для этого предусмотрен оператор LOCK TABLE, который позволяет в приложениях с уровнем изоляции СК выполнить явную установку эксклюзивной блокировки данных, помимо тех блокировок, кото- рые система DB2 автоматически устанавливает для принудительного достижения этого уровня. (Обратите внимание, что в стандарте SQL нет никаких механизмов явного управления параллельностью; см. раздел 15.9.)

В заключение следует отметить, что предшествующая характеристика уровня повто- ряемости считывания как уровня максимальной изоляции относится только к реализации уровня ПС в СУБД DB2. К сожалению, в стандарте языка SQL тот же термин, "повторяемость считывания", используется для описания уровня изоляции, который на- ходится ниже максимального уровня (см. раздел 15.9).

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]