В чем разница между блокировкой и блокировкой в ​​контексте одновременного доступа к базе данных? - PullRequest
26 голосов
/ 24 июня 2010

Я пытаюсь понять статью о параллельном B-дереве, в которой автор упомянул latch vs lock и как защелки не нуждаются в «Менеджере блокировок».Я пытался выяснить, какие различия между этими двумя в течение двух дней.

Google приводит к:

"блокировки обеспечивают логическую согласованность данных. Они реализуются через таблицу блокировок, удерживаемыхв течение длительного времени (например, 2PL) и является частью механизма обнаружения тупиков.

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

Однако я все еще в замешательстве.Кто-нибудь может уточнить это?и что именно делает менеджер блокировок?

Заранее спасибо.

Ответы [ 8 ]

23 голосов
/ 26 февраля 2017

Из КМУ 15-721 (весна 2016 г.), презентация лекции 6, слайды 25 и 26, в которых цитируется Обзор методов блокировки B-деревьев Гетца Грефе:

Замки
→ Защищает логическое содержимое индекса от других txns.
→ Держится в течение txn продолжительности.
→ Необходимо иметь возможность отката изменений.

Задвижки
→ Защищает критические разделы внутренней структуры данных индекса от других потоков.
→ Хранится на время операции.
→ Не нужно иметь возможность отката изменений.

Locks and latches

11 голосов
/ 24 июня 2010

Это действительно зависит от вашей СУБД, но вот хорошее объяснение для Oracle.

http://www.dba -oracle.com / t_lru_latches.htm

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

4 голосов
/ 18 сентября 2015

Другое название защелки - «спин-замок».Это простой цикл while, пока бит не станет равным нулю (в зависимости от реализации).Поток выполнения никогда не спит, пока защелка недоступна.Никакой очереди.Спин-блокировка полезна для кратковременной блокировки объектов памяти, но расточительна, если ее удерживать в течение более длительного времени.См. Статью «Spinlock» в Википедии

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

Менеджер блокировок - это подсистема, которая может предоставить вам как спин-блокировки, так и тяжелые блокировки для поддержки параллелизма.

См. Также статью Тома Кайта о блокировках и блокировках .

2 голосов
/ 22 сентября 2016

Следующие от SQL Server точка зрения.

Защелки - это кратковременные легкие объекты синхронизации. В отличие от блокировок, фиксаторы не сохраняются до всей логической транзакции. Они держатся только на операции на page.

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

Ожидания, вызванные защелками, очень важны для диагностики проблем производительности. Взгляните на Диагностика и устранение конфликтов защелок на SQL Server - Технический документ . PAGEIOLATCH_EX является важным типом ожидания.

Ссылки

  1. Защелки SQL Server и их индикация проблем с производительностью
  2. Статистика ожидания коленного рывка: PAGELATCH
  3. Внутри SQL Server: индексирование и блокировка
1 голос
/ 30 июля 2017

Цитата из OLTP сквозь Зазеркалье и что мы там нашли Стоунбрейкером и др.

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

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

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

1 голос
/ 06 января 2017

Различия между замками и защелками:

Ссылка взята из этого блога.

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

Блокировки обеспечивают согласованность логической транзакции, а защелки обеспечивают согласованность области памяти.

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

0 голосов
/ 09 июня 2019

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

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

0 голосов
/ 03 июня 2019

Согласно статье Архитектура системы баз данных p223.

Защелки отличаются от замков несколькими способами:

  • Замки хранятся в таблице замков и располагаются через хеш-таблицы; защелки находятся в памяти рядом с ресурсами, которые они защищают, и доступны через прямую адресацию.

  • В строгой реализации 2PL блокировки подчиняются строгому протоколу 2PL. Защелки могут быть получены или отброшены во время транзакции на основе внутренней логики специального случая.

  • Получение блокировок полностью зависит от доступа к данным, и, следовательно, порядок и срок действия блокировок зависят в основном от приложений и оптимизатора запросов. Защелки приобретаются специализированным кодом внутри СУБД, а внутренний код СУБД выдает запросы на защелки и выпускается стратегически.

  • Блокировки могут вызывать взаимоблокировку, а блокировки блокировки обнаруживаются и разрешаются путем перезапуска транзакции. Необходимо избегать тупиковой блокировки; возникновение взаимоблокировки защелки представляет ошибку в коде СУБД.

  • Защелки реализуются с использованием атомарной аппаратной инструкции или, в редких случаях, когда это невозможно, путем взаимного исключения в ядре ОС.

  • Вызовы защелки занимают не более нескольких десятков циклов ЦП, тогда как запросы на блокировку занимают сотни циклов ЦП.

  • Менеджер блокировок отслеживает все блокировки, удерживаемые транзакцией, и автоматически снимает блокировки в случае, если транзакция вызывает исключение, но внутренние процедуры СУБД, которые управляют защелками, должны тщательно отслеживать их и включать ручную очистку как часть их исключения обработка.

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

...