Главная » SQL, Базы данных » НАМЕЧЕННЫЕ БЛОКИРОВКИ

0

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

Предположим, что некоторая транзакция т фактически запрашивает блокировку X на некоторой переменной отношения R. После получения запроса от т  система должна

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

Итак, фактически изложенное выше уже показывает, что блокировки X и S  имеют смысл не только для отдельных кортежей, но и для целых переменных  отношения. Согласно рекомендациям, изложенным в [16.10], [16.11], введем три  дополнительных типа блокировок, называемых намеченными блокировками, которые также имеют смысл для переменных отношения, но не для отдельных  кортежей: намеченные разделяемые (Intent Shared — IS) блокировки,  намеченные  исключительные (Intent Exclusive — IX) блокировки и разделяемые  намеченные исключительные (Shared Intent Exclusive — SIX) блокировки. Эти новые типы блокировок могут быть определены неформально, как описано ниже. (Предполагается, что транзакция т затребовала блокировку указанного типа на переменной отношения R; для полноты включены также определения типов X и S.)

■     Намеченная разделяемая блокировка (IS). В транзакции т намечается установка блокировок S на отдельных кортежах переменной отношения R для того, чтобы гарантировать постоянство этих кортежей в процессе их обработки.

■     Намеченная исключительная блокировка (IX). То же, что и IS, наряду с тем, что т может обновлять отдельные кортежи в R и поэтому устанавливать блокировки X на этих кортежах.

■     Разделяемая блокировка (S). Транзакция т может допускать параллельное приме нение других транзакций чтения, но не параллельное применение других транзак ций обновления в переменной отношения R (сама транзакция т не обновляет ни одного из кортежей BR).

■     Разделяемая намеченная исключительная блокировка (SIX). Представляет собой сочетание S и IX; это означает, что т допускает  присутствие параллельно выполняемых транзакций чтения, но не  параллельно выполняемых транзакций обновления в R, но наряду с этим  в  транзакции т могут обновляться отдельные кортежи в R и поэтому должны устанавливаться блокировки X на эти кортежи.

■     Исключительная блокировка (X). Транзакция т вообще не допускает выполнения какого-либо параллельного с ней доступа к R (в самой транзакции Т отдельные кортежи R могут обновляться или не обновляться).

Формальные определения этих пяти типов блокировок иллюстрируются  расширенной версией матрицы совместимости типов блокировок, которая впервые рассматривалась в разделе 16.3 (рис. 16.13).

Рис. 16.13. Матрица совместимости, расширенная с учетом намеченных блокировок

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

1.          Прежде чем любая конкретная транзакция сможет приобрести блокировку S на указанном кортеже, она должна вначале приобрести блокировку IS или более сильную блокировку (как описано ниже) на переменную отношения, содержащую этот кортеж.

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

(Но следует отметить, что это — еще не полное определение. См. аннотацию к [16.10].) Термин сильная блокировка, применяемый в приведенном выше  определении протокола, который полностью формулируется как относительно более сильная блокировка, можно объяснить следующим образом. Рассмотрим граф предшествования, приведенный на рис. 16.14. Принято считать, что блокировка типа L2 сильнее (т.е. находится выше в этом графе), чем блокировка типа L1 тогда и только тогда, когда при наличии обозначения "N" (конфликт) в столбце блокировки L1 в матрице совместимости для заданной строки имеется также обозначение "N" в столбце блокировки L2 для той же строки (см. рис. 16.13). Следует отметить, что запрос на блокировку, оканчивающейся неудачей при использовании блокировки определенного типа, безусловно, также окончится неудачей при запросе блокировки более сильного типа (и из этого факта следует, что всегда безопасно использовать блокировки такого типа, который является более сильным по сравнению со строго необходимым). Заслуживает также внимания то, что ни блокировка S, ни блокировка IX не являются более сильными по сравнению с другими.

Рис. 16.14. Граф предшествования типов блокировок

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

блокировки S, X или SIX на уровне переменной отношения, если они потребуются. В частности, такой оператор поддерживается в СУБД DB2 (только для блокировок S и X, а не для блокировок SIX).

В завершение этого раздела отметим, что во многих системах предусмотрена возможность эскалации блокировок. Это средство представляет собой попытку достичь равновесия  между  конфликтующими  требованиями  повышения  степени  распараллеливания и снижения издержек на управление  блокировками. Основная его идея состоит в том, что после достижения  некоторого заранее заданного порогового значения система автоматически заменяет коллекцию блокировок с тонкой степенью детализации единственной  блокировкой с более грубой детализацией, например, путем оценки мощности множества отдельных блокировок S уровня кортежа и преобразования в  блокировку  S той блокировки IS, которая установлена на переменной  отношения, содержащей отдельных кортежи с блокировками S. Создается впечатление, что этот метод достаточно хорошо проявляет себя на практике [16.9].

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии