Рубрики

Многократная блокировка гранулярности в СУБД

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

Давайте начнем с понимания того, что подразумевается под гранулярностью.

Гранулярность — это размер элемента данных, который можно заблокировать. Теперь Multiple Granularity означает иерархическое разбиение базы данных на блоки, которые могут быть заблокированы и могут отслеживать, что нужно блокировать и каким образом. Такая иерархия может быть представлена графически в виде дерева.

Например, рассмотрим дерево, которое состоит из четырех уровней узлов. Самый высокий уровень представляет всю базу данных. Ниже это узлы типа области ; База данных состоит именно из этих областей. Область имеет дочерние узлы, которые называются файлами. Каждая область имеет те файлы, которые являются ее дочерними узлами. Ни один файл не может занимать более одной области.

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

  • база данных
  • площадь
  • файл
  • запись

Рисунок — Многоуровневая иерархия дерева

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

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

Блокировка намеренного режима —
В дополнение к режимам блокировки S и X , есть три дополнительных режима блокировки с множественной детализацией:

  • Intention-Shared (IS): явная блокировка на более низком уровне дерева, но только с общими блокировками.
  • Intention-Exclusive (IX): явная блокировка на более низком уровне с эксклюзивными или общими блокировками.
  • Shared & Intention-Exclusive (SIX): поддерево, корнируемое этим узлом, явно заблокировано в совместно используемом режиме, а явная блокировка выполняется на более низком уровне с блокировками эксклюзивного режима.

Матрица совместимости для этих режимов блокировки описана ниже:

Рисунок — Многоуровневая иерархия дерева

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

  1. Транзакция T i должна следовать матрице совместимости блокировки.
  2. Сделка T я должен зафиксировать корень дерева первым, и он может заблокировать его в любом режиме.
  3. Транзакция T i может заблокировать узел в режиме S или IS, только если T i в настоящее время имеет родительский узел, заблокированный в режиме IX или IS.
  4. Транзакция T i может заблокировать узел в режиме X, SIX или IX, только если T i в настоящее время имеет родительский узел, заблокированный в режиме IX или SIX.
  5. Транзакция T i может заблокировать узел, только если T i ранее не разблокировал ни одного узла (т. Е. T i является двухфазным).
  6. Транзакция T i может разблокировать узел, только если T i в настоящее время не заблокирован ни один из дочерних узлов узла.

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

  • Скажем, транзакция T 1 считывает запись R a2 в файле F a . Затем T 2 должен заблокировать базу данных, область A 1 и F a в режиме IS (и в этом порядке) и, наконец, заблокировать R a2 в режиме S.
  • Скажем, транзакция T 2 изменяет запись R a9 в файле F a . Затем T 2 необходимо заблокировать базу данных, область A 1 и файл F a (и в этом порядке) в режиме IX и, наконец, заблокировать R a9 в режиме X.
  • Скажем, транзакция T 3 считывает все записи в файле F a . Затем T 3 необходимо заблокировать базу данных и область A 1 (и в этом порядке) в режиме IS и, наконец, заблокировать F a в режиме S.
  • Скажем, транзакция T 4 считывает всю базу данных. Это можно сделать после блокировки базы данных в режиме S.

Обратите внимание, что транзакции T 1 , T 3 и T 4 могут обращаться к базе данных одновременно . Транзакция T 2 может выполняться одновременно с T 1 , но не с T 3 или T 4 .
Этот протокол повышает параллелизм и снижает накладные расходы на блокировку. Блокировка по-прежнему возможна в протоколе множественной детализации, как и в протоколе двухфазной блокировки. Их можно устранить с помощью определенных методов устранения тупиковых ситуаций .

Рекомендуемые посты:

Многократная блокировка гранулярности в СУБД

0.00 (0%) 0 votes