В блоге уже поднималась эта тема. Тем не менее, не лишним будет акцентировать внимание еще раз на различной природе этих сущностей.
Защелки
. Latch - внутренний механизм Oracle, используемый для защиты структур данных в SGA от одновременного доступа. Защелка - атомарная процессорная инструкции типа TEST-И-SET. Защелки всегда эксклюзивны, и это не очередь! Информация о них находится в представлении v$latch.
Блокировки
.Locks, enqueues (замок, очередь) - разные названия по сути одной и той же сущности, защищающей объекты БД . Информация об этом механизме находится в представлении V$LOCK. Термином enqueue называется механизм блокировки. Термином блокирование (“locking”) обозначают следующие события:
- запрос на постановку в очередь для доступа к разделяемому ресурсу
- ожидания доступа
- блокирование доступа иных процессов к ресурсу во время его использования
Защёлки - защищают участки оперативной памяти от разрушения и несогласованного чтения при конкурентном доступе со стороны процессов СУБД. Защёлки живут очень непродолжительное время достаточное только для того, чтобы извлечь или изменить данные в SGA.
Блокировки - защищают записи, таблицы, хранимые процедуры, файлы, табличные пространства и прочие объекты БД, кэш словаря БД во время изменения словаря, ресурсы определяемые приложением. Они живут довольно продолжительное время.
Блокировки
. Время жизни связано со временем жизни транзакции. Завершается транзакция – завершается блокировка.
Защелки
возникают на протяжении транзакции и тут же пропадают, выполнив свою функцию.
Если в некоторой степени абстрагироваться, то:
Защёлки
защищают экземпляр Оракл.
Блокировки
защищают объекты БД или ресурсы определяемые приложением.
Главное: Блокировки реализуются с помощью защёлок, которые являются механизмом самого низкого уровня.
Это были объяснения на пальцах. Более подробно читаем здесь и здесь.
А теперь о семафорах.
Главными ресурсами ядра UNIX, необходимыми для рабочие мероприятия Oracle, в том числе для рабочие мероприятия пользовательских процессов, являются общие сегменты памяти и семафоры. Очевидно, что различные оракловские процессы используют общую память для чтения или изменения данных. Иногда возникает необходимость одновременно обратиться к одному и тому же участку памяти. Для согласованного использования памяти конкурирующими процессами, UNIX использует семафоры, которые обеспечивают взаимоиск¬лючающий доступ. Они реализованы как определенные структуры данных, находящиеся в обл. памяти ядра.