17246

Преднамеренные блокировки

Лекция

Информатика, кибернетика и программирование

Лекция №10 Преднамеренные блокировки Управление блокировками осуществляется из программного обеспечения и осуществляется на уровне пользовательского соединения. Блокировка указывает что пользователь имеет право на использование соответствующего ресурса. К ресур...

Русский

2013-06-30

122.5 KB

6 чел.

Лекция №10

Преднамеренные блокировки

Управление блокировками осуществляется из программного обеспечения, и осуществляется на уровне пользовательского соединения. Блокировка указывает, что пользователь имеет право на использование соответствующего ресурса. К ресурсам, которые может блокировать пользователь, относятся строка данных, страница данных, экстент (8 страниц), таблица или вся база данных.

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

Пользователь не может владеть блокировкой, конфликтующей с блокировкой, которой уже владеет другой пользователь.

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

Система управления блокировками автоматически захватывает и освобождает блокировки в соответствии с действиями пользователей. Для управления блокировками не требуется никаких действий со стороны DBA (администратора базы данных) или программиста.

Блокировки объектов БД разделяются следующим образом:

  •  Блокировка самой базы данных.
  •  Блокировка файлов базы данных.
  •  Блокировка таблиц базы данных.
  •  Блокировка страниц (Единиц обмена с диском, обычно 2-16 Кб. На одной странице содержится несколько строк одной или нескольких таблиц).
  •  Блокировка отдельных строк таблиц.
  •  Блокировка отдельных полей.

Кроме того, можно блокировать индексы, заголовки таблиц или другие объекты.

Чем крупнее объект блокировки, тем меньше возможностей для параллельной работы. Достоинством блокировок крупных объектов является уменьшение накладных расходов системы и решение проблем, не решаемых с использованием блокировок менее крупных объектов.

Например, использование монопольной блокировки на уровне таблицы, очевидно, решает проблему фантомов.

Устно. Современные СУБД, как правило, поддерживают минимальный уровень блокировки на уровне строк или страниц. (В старых версиях настольной СУБД Paradox поддерживалась блокировка на уровне отдельных полей.).

При использовании блокировок объектов разной величины возникает проблема обнаружения уже наложенных блокировок. Если транзакция A пытается заблокировать таблицу, то необходимо иметь информацию, не наложена ли уже блокировка на уровне строк этой таблицы, несовместимая с блокировкой таблицы.

Для решения этой проблемы используется протокол преднамеренных блокировок. Суть протокола заключается в том, что перед тем, как блокировать объект БД, необходимо наложить преднамеренную блокировку (блокировку намерения) на объекты, в состав которых входит блокируемый объект.

Вводятся следующие типы блокировок:

  •  Преднамеренная блокировка с возможностью взаимного доступа (IS-блокировка - Intent Shared lock) или Разделяемое намерение. Указывает, что в транзакции предполагается наложить на ресурс разделяемую блокировку.

Накладывается на некоторый составной объект T и означает намерение блокировать некоторый входящий в T объект в режиме S-блокировки. Например, при намерении читать строки из таблицы T, эта таблица должна быть заблокирована в режиме IS (до этого в таком же режиме должен быть заблокирован файл).

  •  Преднамеренная блокировка без взаимного доступа (IX-блокировка - Intent eXclusive lock) или Монопольное намерение. Указывает, что в транзакции предполагается наложить на ресурс монопольную блокировку.

Накладывается на некоторый составной объект T и означает намерение блокировать некоторый входящий в T объект в режиме X-блокировки. Например, при намерении удалять или модифицировать строки из таблицы T эта таблица должна быть заблокирована в режиме IX (до этого в таком же режиме должен быть заблокирован файл).

  •  Преднамеренная блокировка, как с возможностью взаимного доступа, так и без него (SIX-блокировка - Shared Intent eXclusive lock) или Разделяемо-монопольное намерение. Указывает, что в транзакции предполагается наложить разделяемую блокировку на одни ресурсы и монопольную блокировку на другие ресурсы. 

Накладывается на некоторый составной объект T и означает разделяемую блокировку всего этого объекта с намерением впоследствии блокировать какие-либо входящие в него объекты в режиме X-блокировок. Например, если выполняется длинная операция просмотра таблицы с возможностью удаления некоторых просматриваемых строк, то можно заблокировать эту таблицу в режиме SIX (до этого захватить файл в режиме IS).

Устно. IS, IX и SIX-блокировки должны накладываться на сложные объекты БД (таблицы, файлы). Кроме того, на сложные объекты могут накладываться и блокировки типов S и X. Для сложных объектов (например, для таблицы базы данных) таблица совместимости блокировок имеет следующий вид:

 

Транзакция B пытается наложить на таблицу блокировку:

Транзакция A наложила на таблицу блокировку:

IS

S

IX

SIX

X

IS

Да

Да

Да

Да

Нет

S

Да

Да

Нет

Нет

Нет

IX

Да

Нет

Да

Нет

Нет

SIX

Да

Нет

Нет

Нет

Нет

X

Нет

Нет

Нет

Нет

Нет

Таблица 2 Расширенная таблица совместимости блокировок

Более точная формулировка протокола преднамеренных блокировок для доступа к данным выглядит следующим образом:

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

Понятие относительной силы блокировок можно описать при помощи диаграммы приоритета (сверху - более сильные блокировки, снизу - более слабые):

Таблица 3 Диаграмма приоритета блокировок

Устно. Протокол преднамеренных блокировок не определяет однозначно, какие блокировки должны быть наложены на родительский объект при блокировании дочернего объекта. Например, при намерении задать S-блокировку строки таблицы, на таблицу, включающую эту строку, можно наложить любую из блокировок типа IS, S, IX, SIX, X. При намерении задать X-блокировку строки, на таблицу можно наложить любую из блокировок типа IX, SIX, X.

Устно. Рассмотрим, как разрешается проблема фиктивных элементов (фантомов) с использованием протокола преднамеренных блокировок для доступа к данным.

Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

Транзакция B перед попыткой вставить новую строку должна наложить на таблицу IX-блокировку, или более сильную (SIX или X). Тогда транзакция A, для предотвращения возможного конфликта, должна наложить такую блокировку на таблицу, которая не позволила бы транзакции B наложить IX-блокировку. По таблице совместимости блокировок определяем, что транзакция A должна наложить на таблицу S, или SIX, или X-блокировку. (Блокировки IS недостаточно, т.к. эта блокировка позволяет транзакции B наложить IX-блокировку для последующей вставки строк).

Время

Транзакция A

Транзакция B

S-блокировка таблицы (с целью потом блокировать строки) - успешна

---

S-блокировка строк, удовлетворяющих условию .
(Заблокировано n строк)

---

Выборка строк, удовлетворяющих условию .
(Отобрано n строк)

---

---

IX-блокировка таблицы (с целью потом вставлять строки) - отвергается из-за конфликта с S-блокировкой, наложенной транзакцией A

---

Ожидание…

---

Ожидание…

S-блокировка строк, удовлетворяющих условию .
(Заблокировано n строк)

Ожидание…

Выборка строк, удовлетворяющих условию .
(Отобрано n строк)

Ожидание…

COMMIT

блокировки снимаются

Ожидание…

---

IX-блокировка таблицы (с целью потом вставлять строки) - успешна

---

Вставка новой строки, удовлетворяющей условию .

---

COMMIT

 

Транзакция A дважды читает один и тот же набор строк
Все правильно

 

Результат. Проблема фиктивных элементов (фантомов) решается, если транзакция A использует преднамеренную S-блокировку или более сильную.

Замечание. Т.к. транзакция A собирается только читать строки таблицы, то минимально необходимым условием в соответствии с протоколом преднамеренных блокировок является преднамеренная IS-блокировка таблицы. Однако этот тип блокировки не предотвращает появление фантомов. Таким образом, транзакцию A можно запускать с разными уровнями изолированности - предотвращая или допуская появление фантомов. Причем, оба способа запуска соответствуют протоколу преднамеренных блокировок для доступа к данным.

Уровни изоляции. Манипулирование блокировками средствами SQL.

Термин уровень изоляции используется для описания степени вмешательства параллельных транзакций в работу некоторой заданной транзакции.

Уровень изоляции рассматривается как некоторое свойство транзакции. Чем выше уровень изоляции, тем меньше степень вмешательства (и параллелизма), а чем ниже уровень изоляции, тем больше степень вмешательства (и параллелизма).

Стандарт SQL предусматривает 4 уровня изоляции:

  •  READ UNCOMMITTED - уровень незавершенного считывания (возможно считывание объекта после считывания его текущей транзакцией и до ее завершения).
  •  READ COMMITTED - уровень завершенного считывания (возможно считывание объекта только после завершения транзакции).
  •  REPEATABLE READ - уровень повторяемого считывания (возможно считывание объекта после завершения транзакции).
  •  SERIALIZABLE - уровень способности к упорядочению (установление порядка обращения к объектам согласно уровням изоляции).

Уровень read uncommitted является наименее ограничивающим уровнем изолированности, а serializable – наиболее ограничивающим. По мере роста уровня изолированности SQL Server налагает все более ограничивающую блокировку на все более длительные периоды времени.

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

В стандарте SQL выделены три случая нарушения способности к упорядочению, фактически именно те, которые были описаны выше как проблемы параллелизма:

  •  Неаккуратное считывание ("Грязное" чтение, незафиксированная зависимость).
  •  Неповторяемое считывание (Частный случай несовместного анализа).
  •  Фантомы (Фиктивные элементы - частный случай несовместного анализа).

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

Устно. Различные уровни изоляции определяются по возможности или исключению этих особых случаев нарушения способности к упорядочению. Эти определения описываются следующей таблицей:

Уровень изоляции

Неаккуратное считывание

Неповторяемое считывание

Фантомы

READ UNCOMMITTED

Да

Да

Да

READ COMMITTED

Нет

Да

Да

REPEATABLE READ

Нет

Нет

Да

SERIALIZABLE

Нет

Нет

Нет

Таблица 4 Уровни изоляции стандарта SQL

Уровень изоляции транзакции задается следующим оператором:

SET TRANSACTION {ISOLATION LEVEL

{READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

Этот оператор определяет режим выполнения следующей транзакции, т.е. этот оператор не влияет на изменение режима той транзакции, в которой он подается. Обычно, выполнение оператора SET TRANSACTION выделяется как отдельная транзакция:

… (предыдущая транзакция выполняется со своим уровнем изоляции)

COMMIT;

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

COMMIT;

… (следующая транзакция выполняется с уровнем изоляции REPEATABLE READ)

Подсказки блокировки

Подсказки блокировки – это ключевые слова T-SQL, которые используются с операторами SELECT, INSERT, UPDATE и DELETE, чтобы определить для SQL Server использование предпочтительного типа блокировки на уровне таблицы для определенного оператора.

Можно использовать подсказки блокировки для переопределения принятого по умолчанию уровня изолированности.

Устно. Полезность использование подсказок блокировки может быть, например, в следующем случае:

Предположим, что для всех транзакций используется принятый по умолчанию уровень изолированности read uncommitted (чтение незафиксированных данных). При этом уровне изолированности по данному ресурсу захватывается разделяемая блокировка (S-locks) только до завершения чтения, и затем она освобождается. Если какая-либо транзакция читает одни и те же данные дважды, то результаты чтения могут не совпасть, поскольку другая транзакция могла захватить блокировку между первым и вторым чтениями и модифицировать эти данные.

Чтобы избежать проблемы повторяемости чтения, можно задать уровень изолированности serializable (упорядочиваемость), но это вынудит SQL Server захватить все разделяемые блокировки (S-locks), необходимые для операторов SELECT во всех транзакциях, пока не будет завершена каждая транзакция. Иными словами, для целостности транзакций разделяемые блокировки (S-locks) будут захвачены по таблице, указанной в операторе SELECT любой транзакции.

Если нет необходимости поддерживать упорядочиваемость для всех транзакций, то можно добавить какую-либо подсказку блокировки для определенного запроса.

Описание существующих подсказок блокировки на уровне таблиц.

  1.  HOLDLOCK. Захватывает разделяемую блокировку до завершения транзакции, а не освобождает ее сразу после того, как уже не требуется соответствующая таблица, страница или строка данных. Эквивалентно использованию подсказки блокировки SERIALIZABLE.
  2.  NOLOCK. Применяется только к оператору SELECT. Не получает разделяемых блокировок и не поддерживает монопольных блокировок; читает данные, которые монопольно захвачены другой транзакцией. Эта подсказка позволяет читать нефиксированные данные (dirty read).
  3.  PAGLOCK. Используется для блокировки на уровне страницы там, где обычно используется блокировка на уровне таблицы.
  4.  READCOMMITTED. Выполняется считывание с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности read committed (принятый по умолчанию уровень изолированности для SQL Server).
  5.  READPAST. Применяется только к оператору SELECT и только к строкам, блокированным с помощью блокировки на уровне строк. Пропускаются строки, блокированные другими транзакциями, которые обычно включаются в набор результатов; возвращает результаты без этих блокированных строк. Может использоваться только с транзакциями, выполняемыми на уровне изолированности read committed.
  6.  READUNCOMMITTED. Эквивалентно NOLOCK.
  7.  REPEATABLEREAD. Выполняется считывание с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности repeatable read.
  8.  ROWLOCK. Используются блокировки на уровне строк вместо блокировки на уровне страниц или на уровне таблиц.
  9.  SERIALIZABLE. Выполняется считывание с тем же поведением по блокировкам, как у транзакций, использующих уровень изолированности serializable. Эквивалентно HOLDLOCK.
  10.  TABLOCK. Используется блокировка на уровне таблиц вместо блокировки на уровне страниц или на уровне строк. SQL Server захватывает эту блокировку до завершения оператора.
  11.  TABLOCKX. Используется монопольная блокировка по таблице. Внимание! Эта подсказка препятствует доступу других транзакций к этой таблице.
  12.  UPDLOCK. Используются блокировки изменения вместо монопольных блокировок при чтении таблицы. Эта подсказка позволяет другим пользователям только читать данные и позволяет текущей транзакции изменять эти данные; тем самым никакой другой пользователь не сможет модифицировать эти данные после того, как текущая транзакция в последний раз прочитали их.

Например. Подсказка блокировки HOLDLOCK в операторе SELECT указывает SQL Server захват всех разделяемых блокировок (S-locks) по таблице, заданной в операторе транзакции SELECT, вплоть до конца этой транзакции – независимо от уровня изолированности. Тем самым при повторном чтении будет наблюдаться согласованность данных (они не будут изменены другой транзакцией). Использование подсказок блокировки не влияет на уровень изолированности для других транзакций.

Можно объединять совместимые подсказки блокировки, такие как TABLOCK и REPEATABLEREAD, но нельзя объединять конфликтующие подсказки, такие как REPEATABLEREAD и SERIALIZABLE.

Чтобы задать подсказку блокировки на уровне таблиц, необходимо заключить эту подсказку в круглые скобки после имени таблицы в операторе T-SQL.

Следующая последовательность является примером использования подсказок TABLOCKX в операторе SELECT:

USE pubs

SELECT COUNT(ord_num)

FROM sales (TABLOCKX)

WHERE ord_date > ‘Sep 13 1994

GO

Подсказка TABLOCK сообщает SQL Server, что нужно захватить монопольную блокировку на уровне таблице sales, пока не будет выполнен данный оператор. Эта подсказка обеспечивает, что никакая другая транзакция не сможет модифицировать данные в таблице sales, пока данный запрос подсчитывает заказы из этой таблицы.

Замечание. Оптимизатор запросов SQL Server автоматически определяет наиболее эффективный план исполнения и типы блокировок для запроса. И поскольку оптимизатор запросов автоматически выбирает подходящие тип или типы блокировок, подсказки блокировки следует использовать, если только они хорошо изучены и когда это абсолютно необходимо, иначе они могут отрицательным образом повлиять на параллельно выполняемые задачи.

Протокол двухфазной блокировки. Теорема Есварана о сериализуемости

Концепция способности к упорядочению была впервые предложена Есвараном в виде протокола двухфазной блокировки.

Протокол двухфазной блокировки состоит в следующем:

  1.  Перед выполнение каких-либо операций с некоторым объектом, транзакция должна заблокировать этот объект.
  2.  После снятия блокировки, транзакция не должна накладывать никаких других блокировок.

Транзакции, используемые в этом протоколе, не различаются по типам и считаются монопольными (т.е. X-locks).

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

Протокол двухфазной блокировки характеризуется двумя фазами:

  •  1 фаза - нарастание блокировок. Во время этой фазы накладываются блокировки, и производится работа с заблокированными объектами.
  •  2 фаза - снятие блокировок. Во время этой фазы блокировки только снимаются. Работа с ранее заблокированными данными может продолжаться.

Работа транзакции по такому протоколу можно представить схемой на рисунке 1:

Рисунок 1 Работа транзакции по протоколу двухфазной блокировки

На рисунке 2 показан пример транзакции, не подчиняющийся протоколу двухфазной блокировки:

Рисунок 2 Транзакция, не подчиняющаяся протоколу двухфазной блокировки

На практике, как правило, вторая фаза сводится к одной операции завершения транзакции (или отката транзакции) с одновременным снятием всех блокировок.

Следствие. Если некоторая транзакция A не подчиняется протоколу двухфазной блокировки (и, следовательно, состоит не менее чем из двух операция блокирования и разблокирования), то всегда можно построить другую транзакцию B, которая при чередующемся выполнении вместе с A приводит к графику, не подлежащему упорядочению и, соответственно, неверному.


 

А также другие работы, которые могут Вас заинтересовать

64900. ТОНКІ ПЛІВКИ НАНОКРИСТАЛІЧНОГО КРЕМНІЮ, ЛЕГОВАНІ ЄВРОПІЄМ ТА ІТРІЄМ ДЛЯ ОПТОЕЛЕКТРОНІКИ 410.5 KB
  Останнім часом в оптоелектроніці намітився перехід до тонкоплівкових технологій через їх простоту та відносно низьку вартість. Найбільш перспективним матеріалом, як і в об’ємному виконанні, залишається кремній, завдяки дешевій та добре відпрацьованій інтегральній технології.
64901. Правове регулювання укладення шлюбів громадянами України у державах Європейського Союзу та їх визнання в Україні 403.3 KB
  Робота виконана у Харківському національному університеті внутрішніх справ Міністерство внутрішніх справ України. Пріоритетним завданням зовнішньої та внутрішньої політики України на початку ХХІ ст.
64902. ФІНАНСОВИЙ МОНІТОРИНГ У ЗАБЕЗПЕЧЕННІ ФУНКЦІОНУВАННЯ СИСТЕМИ ЕКОНОМІЧНОЇ БЕЗПЕКИ БАНКІВСЬКИХ УСТАНОВ В УКРАЇНІ 1 MB
  Глобалізація економіки призводить до загострення низки негативних проблем, серед яких і відмивання доходів, одержаних злочинним шляхом. Для кожної країни протидія легалізації доходів, одержаних злочинним шляхом, є питанням національної безпеки.
64903. ПРАВОВА ПРИРОДА ПОДАТКОВИХ СПОРІВ В УКРАЇНІ 144 KB
  Дослідження податкових спорів має вагоме практичне значення. На практиці виникає багато труднощів пов’язаних із відсутністю науково обґрунтованих методологічних підходів до розв’язання податкових спорів які становлять значну частину від загального об’єму адміністративних справ.
64904. АВТОМАТИЗАЦІЯ КЕРУВАННЯ ПРОЦЕСОМ АЕРОЗОЛЬНОГО НАНОКАТАЛІЗУ В СИСТЕМАХ УТИЛІЗАЦІЇ ВІДХОДІВ ХЛОРОРГАНІЧНОГО СИНТЕЗУ 195 KB
  Актуальною задачею в зв’язку з цим є подальший розвиток наукових досліджень в області автоматизації процесів аерозольного нанокаталізу з застосуванням сучасних методів керування та програмнотехнічних засобів що дозволило б суттєво підвищити екологічну безпеку утилізації...
64905. Мультигармонічні плазмо-пучкові супергетеродинні лазери на вільних електронах 668 KB
  Серед можливих конструкцій супергетеродинних лазерів на вільних електронах які найбільш перспективні для практичної реалізації необхідно виділити двопотокові та плазмопучкові ЛВЕ. Незважаючи на те що саме плазмопучкова версія супергетеродинного ЛВЕ була запропонована першою основний розвиток...
64906. БАНКІВСЬКЕ КРЕДИТУВАННЯ ЕКСПОРТНОЇ ДІЯЛЬНОСТІ ПІДПРИЄМСТВ В УКРАЇНІ 258 KB
  У свою чергу умови кредитування є одним із чинників конкурентної боротьби окремих підприємств і держав у цілому на міжнародних ринках збуту оскільки кредит так само як ціна або якість продукції розширює можливості експортера щодо збуту а імпортера щодо придбання товарів та послуг.
64907. ПІДВИЩЕННЯ ЕФЕКТИВНОСТІ ВИГОТОВЛЕННЯ ЗОВНІШНІХ НАПІВКРУГЛИХ ШЛІЦЬОВИХ КАНАВОК У ВАЛАХ ТА НАПРАВЛЯЮЧИХ 170 KB
  Для досягнення поставленої мети в роботі розв’язуються такі задачі: провести аналіз конструкцій і технологій виготовлення шліцьових валів і направляючих з аналізом їх на технологічність щодо виготовлення ремонтопридатності й експлуатаційної надійності та довговічності...
64908. АДМІНІСТРАТИВНІ ПРОЦЕДУРИ ПРОХОДЖЕННЯ СЛУЖБИ В ОРГАНАХ ВНУТРІШНІХ СПРАВ 178 KB
  Становлення правової держави в Україні вимагає реального утвердження принципу верховенства права, зміцнення законності та правопорядку в країні, забезпечення прав і свобод громадян. Вирішення цього завдання, з одного боку, потребує посилення правоохоронної функції держави...