ВУЗ:
Составители:
Рубрика:
58
достигается более широкий параллелизм, чем на уровне ПС (такая ситуация возможна, но
вовсе не обязательна).
В заключение следует отметить, что предшествующая характеристика уровня ПС
как уровня максимальной изоляции относится к уровню ПС, воплощенному в системе
DВ2. К сожалению, в стандарте языка SQL тот же термин “повторяемость считывания”
используется для описания уровня изоляции, который находится ниже максимального
уровня.
Протокол преднамеренной блокировки или гранулированные
синхронизационные захваты
До сих пор в этой лекции предполагалось, что блокировке подвергается отдельный
кортеж. Однако в принципе не существует никаких ограничений на блокирование
больших или меньших единиц данных, например целого отношения, базы данных или
(пример противоположного характера) некоторого значения атрибута внутри заданного
кортежа. Ситуация такого типа называется степенью дробления блокировок. Как обычно,
здесь наблюдается некоторый тонкий баланс между степенью дробления и
параллелизмом: чем мельче степень дробления, тем выше параллелизм, чем крупнее
степень дробления, тем меньше блокировок можно задать и требуется протестировать, а
значит, будут меньшие накладные расходы (т.е. требуется меньшее количество
необходимых действий). Например, если транзакция накладывает Х-блокировку на целое
отношение, то нет необходимости задавать Х-блокировку для отдельных кортежей внутри
этого отношения, что в результате приводит к уменьшению общего числа блокировок. С
другой стороны, никакая другая параллельная транзакция не в состоянии наложить
никаких других блокировок на это отношение или кортежи этого отношения.
Предположим, что транзакция Т задает Х-блокировку для некоторого отношения R.
В ответ на запрос транзакции Т система должна сообщить о наличии других блокировок,
наложенных другими транзакциями на любой кортеж отношения R. И если такая
блокировка наложена, то запрос транзакции T не будет выполнен в данный момент
времени. Как система может обнаружить конфликт такого рода? Очевидно, было бы
крайне нежелательно проверять, блокируется ли каждый кортеж отношения R какой-либо
другой транзакцией, а также задана ли какая-нибудь блокировка для какого-либо кортежа
отношения R. Вместо этого можно ввести еще один протокол, а именно протокол
преднамеренной блокировки или гранулированных синхронизационных захватов, в
соответствии с которым, прежде чем накладывать блокировку на кортеж (вероятно,
преднамеренную блокировку, о которой подробнее рассказывается ниже), следует
наложить ее на все отношения, в которых этот кортеж находится. Тогда обнаружить
конфликтную ситуацию, рассмотренную выше, значительно проще за счет обнаружения
блокировки на уровне отношений.
Как уже упоминалось, X- и S-блокировки синхронизационного захвата можно
задавать как для отдельных кортежей, так и для целых отношений. Можно ввести три
типа преднамеренных блокировок (гранул), которые имеют смысл для целых отношений,
но не для отдельных кортежей:
- преднамеренная блокировка с возможностью взаимного доступа (Intent
Shared lock - IS);
- преднамеренная блокировка без взаимного доступа (Intent eXclusive lock – IX);
- преднамеренная блокировка одновременно с возможностью взаимного
доступа;
- преднамеренная блокировка без возможности взаимного досутпа (Shared
Intent eXclusive lock - SIX).
Ниже приводятся неформальные определения различных видов блокировок (здесь
предполагается, что транзакция Т накладывает блокировку рассматриваемого типа на
отношение R), причем для полноты картины также приводятся определения S- и Х-
достигается более широкий параллелизм, чем на уровне ПС (такая ситуация возможна, но
вовсе не обязательна).
В заключение следует отметить, что предшествующая характеристика уровня ПС
как уровня максимальной изоляции относится к уровню ПС, воплощенному в системе
DВ2. К сожалению, в стандарте языка SQL тот же термин “повторяемость считывания”
используется для описания уровня изоляции, который находится ниже максимального
уровня.
Протокол преднамеренной блокировки или гранулированные
синхронизационные захваты
До сих пор в этой лекции предполагалось, что блокировке подвергается отдельный
кортеж. Однако в принципе не существует никаких ограничений на блокирование
больших или меньших единиц данных, например целого отношения, базы данных или
(пример противоположного характера) некоторого значения атрибута внутри заданного
кортежа. Ситуация такого типа называется степенью дробления блокировок. Как обычно,
здесь наблюдается некоторый тонкий баланс между степенью дробления и
параллелизмом: чем мельче степень дробления, тем выше параллелизм, чем крупнее
степень дробления, тем меньше блокировок можно задать и требуется протестировать, а
значит, будут меньшие накладные расходы (т.е. требуется меньшее количество
необходимых действий). Например, если транзакция накладывает Х-блокировку на целое
отношение, то нет необходимости задавать Х-блокировку для отдельных кортежей внутри
этого отношения, что в результате приводит к уменьшению общего числа блокировок. С
другой стороны, никакая другая параллельная транзакция не в состоянии наложить
никаких других блокировок на это отношение или кортежи этого отношения.
Предположим, что транзакция Т задает Х-блокировку для некоторого отношения R.
В ответ на запрос транзакции Т система должна сообщить о наличии других блокировок,
наложенных другими транзакциями на любой кортеж отношения R. И если такая
блокировка наложена, то запрос транзакции T не будет выполнен в данный момент
времени. Как система может обнаружить конфликт такого рода? Очевидно, было бы
крайне нежелательно проверять, блокируется ли каждый кортеж отношения R какой-либо
другой транзакцией, а также задана ли какая-нибудь блокировка для какого-либо кортежа
отношения R. Вместо этого можно ввести еще один протокол, а именно протокол
преднамеренной блокировки или гранулированных синхронизационных захватов, в
соответствии с которым, прежде чем накладывать блокировку на кортеж (вероятно,
преднамеренную блокировку, о которой подробнее рассказывается ниже), следует
наложить ее на все отношения, в которых этот кортеж находится. Тогда обнаружить
конфликтную ситуацию, рассмотренную выше, значительно проще за счет обнаружения
блокировки на уровне отношений.
Как уже упоминалось, X- и S-блокировки синхронизационного захвата можно
задавать как для отдельных кортежей, так и для целых отношений. Можно ввести три
типа преднамеренных блокировок (гранул), которые имеют смысл для целых отношений,
но не для отдельных кортежей:
- преднамеренная блокировка с возможностью взаимного доступа (Intent
Shared lock - IS);
- преднамеренная блокировка без взаимного доступа (Intent eXclusive lock – IX);
- преднамеренная блокировка одновременно с возможностью взаимного
доступа;
- преднамеренная блокировка без возможности взаимного досутпа (Shared
Intent eXclusive lock - SIX).
Ниже приводятся неформальные определения различных видов блокировок (здесь
предполагается, что транзакция Т накладывает блокировку рассматриваемого типа на
отношение R), причем для полноты картины также приводятся определения S- и Х-
58
Страницы
- « первая
- ‹ предыдущая
- …
- 56
- 57
- 58
- 59
- 60
- …
- следующая ›
- последняя »
