В чем разница между блокировкой и защелкой в контексте одновременного доступа к базе данных?
Я пытаюсь понять статью о параллельном B-дереве, в которой автор упомянул latch vs lock и как защелки не нуждаются в "Менеджере блокировок". Я пытался выяснить, какие различия между этими двумя в течение двух дней.
Google приводит к:
"Блокировки гарантируют логическую согласованность данных. Они реализуются через таблицу блокировок, хранящуюся в течение длительного времени (например, 2PL), и являются частью механизма обнаружения взаимоблокировок.
защелки похожи на семафоры. Они обеспечивают физическую согласованность данных и ресурсов, которые не видны на уровне транзакций ".
Тем не менее, я все еще в замешательстве. Кто-нибудь может уточнить это? и что именно делает менеджер блокировок?
Заранее спасибо.
Ответы
Ответ 1
Из CMU 15-721 (Spring 2016), презентация лекции 6, слайды 25 и 26, в которых цитируется Обзор методов блокировки B-Tree by Goetz Graefe:
Замки
→ Защищает логическое содержимое индексов от других txns.
→ Сохранено для длительности txn.
→ Необходимо иметь возможность отката изменений.
Задвижки
→ Защищает критические разделы внутренней структуры данных индексов от других потоков.
→ Сохранено для продолжительности работы.
→ Не нужно иметь возможность отката изменений.
![Замки и защелки]()
Ответ 2
Это действительно зависит от вашей СУБД, но здесь хорошее объяснение для Oracle.
http://www.dba-oracle.com/t_lru_latches.htm
Защелки похожи на блокировки для оперативной памяти структуры для предотвращения одновременных доступа и обеспечения последовательного код ядра. LRU (в последнее время используемые) защелки используются при поиске, добавление или удаление буфера из буферный кеш, действие, которое может выполняться одним процессом за раз.
Ответ 3
Другое название защелки - "спин-замок". Это простой цикл while, пока бит не станет равным нулю (в зависимости от реализации). Поток выполнения никогда не спит, пока защелка недоступна. Никакой очереди. Спин-блокировка полезна для кратковременной блокировки объектов памяти, но расточительна, если ее удерживать в течение более длительного времени. Смотрите статью "Spinlock" в Википедии
Блокировки обычно поддерживаются системой, и в случае их снятия ваш поток будет переведен в спящий режим, чтобы он не занимал ресурсы процессора. Каждая блокировка содержит внутреннюю очередь всех приостановленных потоков.
Диспетчер блокировок - это подсистема, которая может предоставить вам как спин-блокировки, так и тяжелые блокировки для поддержки параллелизма.
Смотрите также статью Тома Кайта о защелках и замках.
Ответ 4
Ниже приведена точка ожидания SQL Server.
Защелки - это краткосрочные объекты синхронизации легкого веса. В отличие от блокировок, защелки не сохраняются до полной логической транзакции. Они работают только на операции на page
.
Захваты используются движком для синхронизации нескольких потоков (например, попытка вставить в таблицу). Защелки не предназначены для разработчиков или приложений - для этого движка работает. Защелки - это механизм внутреннего контроля. В то время как блокировки предназначены для разработчика и приложения для контроля. Защелки предназначены для согласования внутренней памяти. Замки предназначены для логической последовательности транзакций.
Ожидания, вызванные защелками, очень важны для диагностики проблем производительности. Взгляните на Диагностика и разрешение споров защелки на SQL Server - Технический документ. PAGEIOLATCH_EX
является важным типом ожидания.
Ссылки
Ответ 5
Разница между замками и защелками:
Ссылка, взятая из этого блога.
Блокировки гарантируют, что одна и та же запись не может быть изменена двумя различными соединениями, а защелки гарантируют, что запись находится на соответствующей странице данных для дальнейшего чтения и записи.
Замки обеспечивают согласованность логической транзакции, а защелки обеспечивают согласованность области памяти.
Администратор базы данных может управлять и управлять блокировками базы данных, применяя различные уровни изоляции и для защелок, DBA не имеет никакого управления, потому что его управляет SQL Server.
Ответ 6
Цитата из OLTP через зазеркалье и то, что мы там нашли от Stonebraker и др.
Блокировка. Традиционная двухфазная блокировка создает значительные накладные расходы, так как все обращения к структурам баз данных управляются отдельным объектом, Lock Manager.
Latching. В многопоточной базе данных многие структуры данных должны быть зафиксированы перед их доступом. Удаление этой функции и переход к однопоточному подходу имеют заметное влияние на производительность.
Эта интерпретация затем связывает блокировку с объектами уровня базы данных, например. строк, тогда как защелки работают на более низком уровне структур данных.
Ответ 7
Согласно статье " Архитектура системы баз данных", стр. 223.
Защелки отличаются от замков рядом способов:
-
Замки хранятся в таблице блокировок и располагаются через хеш-таблицы; защелки находятся в памяти рядом с ресурсами, которые они защищают, и доступны через прямую адресацию.
-
В строгой реализации 2PL блокировки подчиняются строгому протоколу 2PL. Защелки могут быть получены или отброшены во время транзакции на основе внутренней логики специального случая.
-
Получение блокировки полностью зависит от доступа к данным, и, следовательно, порядок и срок действия блокировки получают в основном приложения и оптимизатор запросов. Защелки приобретаются специализированным кодом внутри СУБД, а внутренний код СУБД выдает запросы на защелки и выпускается стратегически.
-
Блокировки могут вызывать взаимоблокировки, а блокировки обнаруживаются и разрешаются путем перезапуска транзакций. Необходимо избегать тупиковой блокировки; возникновение взаимоблокировки защелки представляет ошибку в коде СУБД.
-
Защелки реализуются с помощью атомарной аппаратной инструкции или, в редких случаях, когда это недоступно, путем взаимного исключения в ядре ОС.
-
Вызовы защелки занимают не более нескольких десятков циклов ЦП, тогда как запросы блокировки занимают сотни циклов ЦП.
-
Менеджер блокировок отслеживает все блокировки, удерживаемые транзакцией, и автоматически снимает блокировки в случае, если транзакция выдает исключение, но внутренние процедуры СУБД, которые управляют защелками, должны тщательно отслеживать их и включать ручную очистку как часть обработки их исключений.
-
Защелки не отслеживаются и поэтому не могут быть автоматически разблокированы в случае сбоя задания.
Ответ 8
Блокировки могут быть добавлены в объекты базы данных, например, кортежи, транзакции.
Защелки могут быть добавлены в подчеркнутое представление данных, например, таблицу страниц в памяти, которая отображает идентификатор страницы в конкретном кадре.