Механизм групповых защелок. Родительские и дочерние защелки.v$latch,v$latch_parent,v$latch_children

dbstalker, 13 июня

В статье "Oracle latches – механизм последовательного доступа Статья II" (к.ф.-м.н. Ю.Пудовченко, ypudovchenko@ot.ru “Открытые технологии”) есть небольшое описание родительских и дочерних защелок. Я приведу выдержку из этой статьи.

В СУБД Oracle защелки бывают единичные и групповые. Единичные защелки существуют в единственном числе. Групповые состоят из родительской защелки и множества дочерних, которые являются подчиненными к родительской. Единичные и родительские защелки фиксированы в коде. Примерами единичных защелок являются process allocation, session allocation, trace latch, alert log latch.

Родительских - cache buffers lru chain, cache buffers chains, shared pool, redo allocation.

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

Рассмотрим пример. Для того, чтобы обновить блок, находящийся в кеше, сервер Oracle захватывает родительскую защелку cache buffer chains. Буферный кеш состоит из цепочек блоков, объединенных одним хеш-значением, поэтому родительская защелка cache buffer chains порождает для пользовательского процесса дочернюю защелку, связанную с конкретной хеш-цепочкой, после чего процесс проходит по хеш-цепочке в поисках нужного блока. Затем процесс “пришпиливает” (“pins”) блок в памяти и освобождает дочернюю защелку. После выполнения операцию над блоком пользовательский процесс освобождает блок (unpins).

Не на каждую цепочку буферов создается одна дочерняя защелка. В моей системе количество хеш-цепочек 489733 (параметр _db_block_hash_buckets), а количество дочерних защелок - 2048 (параметр _db_block_hash_latches). Т.е. одна защелка на 489733/2048 = 239,127 цепочек.

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

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

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

Если узким местом является одна из дочерних защелок, то это свидетельствует о наличии "hot blocks" – интенсивно используемых/обновляемых блоков.

Несколько замечаний от себя:

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

Представление v$latch_parent содержит статистики родительских защелок. Все столбцы идентичны столбцам представления v$latch. Oracle считает единичные защелки частным случаем групповых защелок в том смысле, что в v$latch_parent для них, как и для истинно родительских, есть соответствующая запись.

Представление v$latch_children содержит статистики дочерних защелок. Все столбцы идентичны столбцам представления v$latch+ столбец child#. Для защелок, имеющих одного и того же родителя, latch# совпадает.

v$latch_parent+v$latch_children= все защелки

Представление V$LATCH содержит итоговую статистику по защелкам сгруппированную по типу. С этого представления нужно начинать анализ в случае проблем с защелками.

 

Новый комментарий

Я не спамер: введите суму 2+7



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа