Скачиваний:
38
Добавлен:
01.04.2014
Размер:
539.65 Кб
Скачать

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

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

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

Уровней изоляции может быть несколько, например в [14.4] их задано пять, в [14.9], как и в стандарте языка SQL, — четыре, а в системе DB2 фирмы IBM поддер­живается два уровня. Вообще говоря, чем выше уровень изоляции, тем меньше степень вмешательства (и параллелизма), а чем ниже уровень изоляции, тем больше сте­пень вмешательства (и параллелизма). В качестве примера рассмотрим два уровня, поддерживаемых системой DB2, которые называются уровнями стабильности кур­сора и повторяемого считывания. Уровень повторяемого считывания (ПС) явля­ется максимальным уровнем; причем если все транзакции действуют на этом уровне, то графики запуска обладают возможностью упорядочения (при изложении материа­ла выше в этой главе по умолчанию полагалось, что все транзакции выполняются именно на этом уровне изоляции). Уровню стабильности курсора (СК) для транзак­ции T1 присущи несколько другие особенности:

• транзакция адресуется к некоторому кортежу p(///),

• таким образом задается блокировка для кортежа p,

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

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

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

/// Название "уровень стабильности курсора" происходит от того, что обращение к кортежу осуществ­ляется с помощью установки курсора для заданного кортежа (это обсуждалось в предыдущих главах кни­ги). Следует уточнить, что в системе DB2 блокировка 77, наложенная на кортеж р, является блокировкой "обновления" (U-блокировка), а не блокировкой с возможностью взаимного доступа (S-блокировка). U-блокировки совместимы с S-блокировками, но не с другими U-блокировками и, конечно, не с другими X-блокировками. Далее эти уточнения не будут приниматься во внимание.///

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

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

В заключение следует отметить, что предшествующая характеристика уровня ПС как уровня максимальной изоляции относится к уровню ПС, воплощенному в системе DB2. К сожалению, в стандарте языка SQL тот же термин "повторяемость считыва­ния" используется для описания уровня изоляции, который находится ниже макси­мального уровня. Подробнее это описано ниже в данной главе.

Соседние файлы в папке Дейтл Введ в БД