Мы уже говорили,
что объектами блокирования могут быть объекты разного уровня, начиная с целой
БД и заканчивая кортежем.
Понятно,
что чем крупнее объект синхронизационного захвата (неважно, какой природы этот
объект — логический или физический), тем меньше синхронизационных захватов будет
поддерживаться в системе, и при этом, соответственно, будут меньшие накладные
расходы. Более того, если выбрать в качестве уровня объектов для захватов файл
или отношение, то будет решена даже проблема фантомов (если это не ясно сразу,
посмотрите еще раз на формулировку проблемы фантомов и определение двухфазного
протокола захватов).
Но вся беда
в том, что при использовании для захватов крупных объектов возрастает вероятность
конфликтов транзакций и тем самым уменьшается допускаемая степень их параллельного
выполнения. Фактически при укрупнении объекта
синхронизационного захвата мы умышленно огрубляем ситуацию и видим конфликты
в тех ситуациях, когда на самом деле конфликтов нет. Действительно, если транзакция
Т1 обрабатывает первую, пятую и двадцатую строку в таблице R1, но блокирует
всю таблицу, то транзакция Т2, которая обрабатывает шестую и восьмую строки
той же таблицы не сможет получить к ним доступ, хотя на уровне строк никаких
конфликтов нет.
В большинстве
современных систем используются покортежные, то есть построковые синхронизационные
захваты.
Однако нелепо
было бы применять покортежную блокировку в случае выполнения, например, операции
удаления всего отношения или удаления всех строк в отношении.
Подобные
рассуждения привели к понятию гранулированных синхронизационных захватов и разработке
соответствующего механизма.
При применении
этого подхода синхронизационные захваты могут запрашиваться по отношению к объектам
разного уровня: файлам, отношениям и кортежам. Требуемый уровень объекта определяется
тем, какая операция выполняется (например, для выполнения операции уничтожения
отношения объектом синхронизационного захвата должно быть все отношение, а для
выполнения операции удаления кортежа — этот кортеж). Объект любого уровня может
быть захвачен в режиме S (разделяемом) или X (монопольном). Вводится специальный
протокол гранулированных захватов и определены новые типы захватов: перед захватом
объекта в режиме S или X соответствующий объект более высокого уровня должен
быть захвачен в режиме IS, IX или SIX.
IS (Intented
for Shared lock, предваряющий разделяемую блокировку) по отношению к некоторому
составному объекту 0 означает намерение захватить некоторый входящий в 0 объект
в совместном режиме. Например, при намерении читать кортежи из отношения R это
отношение должно быть захвачено в режиме IS (а до этого в таком же режиме должен
быть захвачен файл).
IX (Intented
for exclusive lock, предваряющий жесткую блокировку) по отношению к некоторому
составному объекту 0 означает намерение захватить некоторый входящий в 0 объект
в монопольном режиме. Например, при намерении удалять кортежи из отношения R
это отношение должно быть захвачено Б режиме IX (а до этого в таком же режиме
должен быть захвачен файл).
SIX (Shared,
Intented for eXclusive lock, разделяемая блокировка объекта, предваряющая дальнейшие
жесткие блокировки его составляющих) по отношению к некоторому составному объекту
О означает совместный захват всего этого объекта с намерением впоследствии захватывать
какие-либо входящие в него объекты в монопольном режиме. Например, если выполняется
длинная операция просмотра отношения с возможностью удаления некоторых просматриваемых
кортежей, то экономичнее всего захватить это отношение в режиме SIX (а до этого
захватить файл в режиме IS).
Весьма трудно
описать словами все возможные ситуации. Приведем полную таблицу совместимости
захватов, анализируя которую можно выявить все случаи (см. табл. 11.2).
Таблица
11.2. Матрица совместимости блокировок.
L1\L2 |
X |
S |
IX |
IS |
SIX |
||
Нет блокировки |
Да |
Да |
Да |
Да |
Да |
||
X |
Нет |
Нет |
Нет |
Нет |
Нет |
||
S |
Нет |
Да |
Нет |
Да |
Нет |
||
IX |
Нет |
Нет |
Да |
Да |
Мет |
||
IS |
Нет |
Да |
Да |
Да |
Да |
||
SIX |
Нет |
Нет |
Нет |
Да |
Нет |
||
Протокол
гранулированных захватов требует соблюдения следующих правил:
Блокировка
L1 называется более сильной по отношению к блокировке L2 тогда и только тогда,
когда для любой конфликтной ситуации (Нет — недопустимо) в столбце блокировки
L2 в некоторой строке матрицы совместимости блокировок (см. табл. 11.2) существует
также конфликт в столбце блокировки L1 в той же строке.
Диаграмма
приоритетов блокировок приведена на рис. 11.12.
Рис.
11.12. Диаграмма приоритета блокировок различных типов
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается:
- Cколько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее
При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.