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

15.8. Блокировка намерения

До сих пор в этой главе предполагалось, что блокировке подвергается отдельный кортеж. Однако, в принципе, не существует никаких ограничений на блокировку боль- ших или меньших единиц данных, например всей переменной-отношения, всей базы данных или (пример противоположного характера) отдельного атрибута внутри заданно- го кортежа. Уровень блокируемых объектов определяется степенью детализации бло- кировки [15.9], [15.10]. Как обычно, здесь наблюдается компромисс между степенью детализации и параллельностью: чем мельче объекты детализации, тем выше уровень параллельности в системе; чем крупнее объекты детализации, тем меньше блокировок можно будет установить, а значит потребуется контролировать. В результате снизятся соответствующие накладные расходы (т.е. потребуется меньше необходимых действий). Например, если транзакция устанавливает Х-блокировку для всей переменной- отношения в целом, нет необходимости устанавливать Х-блокировки для отдельных кор- тежей этой переменной-отношения, что в результате приводит к уменьшению общего количества установленных блокировок. С другой стороны, никакая другая параллельно выполняющаяся транзакция не сможет установить никаких других блокировок для этой переменной-отношения или ее кортежей.

Предположим, что транзакция Т устанавливает Х-блокировку для некоторой пере- менной-отношения R. Получив от транзакции Т подобный запрос, система должна быть способна проверить наличие блокировок, установленных ранее другими транзакциями

для любых кортежей этой переменной-отношения R. И если хотя бы одна подобная бло- кировка была установлена, то запрос транзакции Т выполнить в данный момент будет невозможно. Но как система сможет обнаружить конфликт такого рода? Очевидно, что крайне нежелательно проверять в каждом из кортежей переменной-отношения R наличие установленной для него блокировки со стороны какой-либо другой транзакции. Не менее нежелательна и тотальная проверка всех установленных в системе блокировок, не явля- ется ли какая-то из них блокировкой некоторого кортежа отношения R. Вместо этого можно ввести еще один протокол, а именно — протокол блокировки намерения, в со- ответствии с которым, прежде чем транзакции будет разрешено запросить установку блокировки для кортежа, она должна будет установить блокировку (называемую блоки- ровкой намерения; подробности приводятся ниже) на всю переменную-отношение, в ко- торой этот кортеж находится. Тогда обнаружить рассмотренную выше конфликтную си- туацию будет значительно проще, поскольку проверку существования блокировок кор- тежей можно будет выполнять шуровне переменных-отношений.

Как уже упоминалось, установка Х- и S-блокировок имеет смысл как для отдельных кортежей, так и для переменных-отношений в целом. В соответствии с [15.8] и [15.9] мож- но ввести три типа блокировки намерения, которые имеют смысл для переменных- отношений в целом, но не для отдельных кортежей: разделяемая блокировка намерения (Intent Shared — IS), эксклюзивная блокировка намерения (Intent exclusive — IX) и раз- деляемая эксклюзивная блокировка намерения (Shared Intent exclusive — SIX). Ниже приводятся неформальные определения всех этих видов блокировок (предполагается, что транзакция Т устанавливает блокировку рассматриваемого типа для переменной-отношения R), причем для полноты изложения приводятся также определения S- и Х-блокировок.

  • IS-блокировка. Транзакция Т намеревается установить S-блокировки для отдель- ных кортежей переменной-отношения R, чтобы получить гарантию стабильности состояния этих кортежей в процессе их обработки.

  • IX-блокировка. В дополнение к действиям, описанным выше в определении IS- блокировки, транзакция Т сможет обновлять отдельные кортежи переменной- отношения R и, следовательно, устанавливать для них Х-блокировки.

  • S-блокировка. Транзакция Т допускает параллельное считывание данных из пе- ременной-отношения R, но запрещает их обновление. Сама транзакция Т не имеет права обновлять какие-либо кортежи переменной-отношения R.

  • SIX-блокировка. В определении этой блокировки комбинируются возможности S- и IX-блокировок, т.е. транзакция Т допускает параллельное считывание данных из переменной-отношения R, но запрещает их обновление. В дополнение к этому транзакция Т имеет право обновлять отдельные кортежи переменной-отношения R, для которых устанавливаются Х-блокировки.

  • Х-блокировка. Транзакция Т не допускает никакого параллельного доступа к пе- ременной-отношению R. Сама транзакция Т либо может, либо не может обновлять произвольные кортежи переменной-отношения R.

Формальные определения этих пяти типов блокировки можно дать с помощью пред- ставленной на рис. 15.11 матрицы совместимости, которая является расширенной верси- ей матрицы, обсуждавшейся выше, в разделе 15.3.

X

SIX

IX

S

IS

X

N

N

N

N

N

Y

SIX

N

N

N

N

Y

Y

IX

N

N

Y

N

Y

Y

S

N

N

N

Y

Y

Y

IS

N

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Y

Рис. 15.11. Матрица совместимости, расширенная блокировками намерения

Теперь можно дать более точную формулировку протокола блокировки намерения.

  1. Прежде чем некоторой транзакции будет разрешено сделать запрос на установку S- блокировки для определенного кортежа, она должна установить либо IS- блокировку, либо блокировку более сильного типа для той переменной-отношения, в которой данный кортеж содержится.

  2. Прежде чем некоторой транзакции будет разрешено сделать запрос на установку X- блокировки для определенного кортежа, она должна установить либо IX- блокировку, либо блокировку более сильного типа (см. ниже) для той переменной- отношения, в которой данный кортеж содержится.

(Однако следует отметить, что это все еще далеко не полное определение. Подробности можно найти в комментарии к [15.9].)

Упомянутое в приведенном выше определении понятие относительной силы блокиро- вок можно пояснить с помощью диаграммы приоритетов, представленной на рис. 15.12. Блокировка типа L2 называется более сильной (т.е. находится на диаграмме приоритета выше) по отношению к блокировке типа Ы тогда и только тогда, когда в матрице совмес- тимости для любой конфликтной ситуации (N), отмеченной в некоторой строке столбца блокировки типа Ы, пометка (N) присутствует в той же строке столбца блокировки типа L2

(см. рис. 15.11). Обратите внимание на то, что за- прос установки блокировки, который отвергается некоторым типом блокировки, обязательно будет отвергнут и более сильным типом блокировки (таким образом, неявно подразумевается, что всегда можно использовать более сильные типы блокиров- ки вместо того типа, который строго необходим в данном конкретном случае). Обратите внимание, что ни S-, ни IX-блокировки не являются более сильны- ми по отношению одна к другой.

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

ного рода операторов блокировки (LOCK). Это позволит транзакциям в случае необходи- мости явно устанавливать S-, Х- и SIX-блокировки на уровне переменных-отношений. Например, подобный оператор явной установки блокировок поддерживается СУБД DB2 (хотя это и не требуется стандартом языка SQL).

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

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