Алгоритм, управляющий буферным кэшем базы данных в Oracle8i и последующих версиях, существенно отличается от старого алгоритма LRU. Он называется
алгоритмом счетчика контактов.
Основная стоящая за новым алгоритмом концепция заключается в управлении буферами в буферном кэше базы данных на основании числа доступов к блоку, или "контактов" с ним. Это более эффективно, чем "хронологическое" перемещение блока к вершине списка при каждом его использовании. Данный алгоритм существенно сокращает накладные расходы на управление списком LRU. Кроме того, он полностью устраняет любую необходимость полностью "защелкивать" буфер при передвижении его по списку. Буфер больше не перемещается со своего постоянного местоположения в списке при каждом обращении к нему, или "контакте". Когда происходит обращение к буферу, его счетчик контактовувеличивается.
Как же стареют блоки? Это очень сложный процесс, но мы объясним его в простых терминах. Имеется некий внутренний порог, значение которого указывает, какие блоки могут оставаться в списке, а какие должны считаться устаревшими. Если блок рассматривается как кандидат, чтобы стать устаревшим, его счетчик контактов сравнивается с этим порогом. Если счетчик контактов больше порога, то он устанавливается равным либо какому-то малому числу, либо половине своего первоначального значения (выбор определяется внутренними установками и является конфигурируемым). Это делается для того, чтобы дать блоку еще один шанс остаться в кэше, так как он использовался в недавнем прошлом.
Если счетчик контактов меньше порога, он признается устаревшим и заменяется новыми данными, заносимыми в кэш буфера базы данных. В отличие от алгоритма LRU, в котором новый блок вносился в вершину списка LRU, новый алгоритм после переустановки счетчика контактов блока помещает его в середину списка. Рациональное зерно этого метода заключается в том, чтобы заставить блок "заработать" себе путь к вершине списка.
Выше средней точки может быть только конечное число блоков, и все блоки
со счетчиками контактов, превышающими этот порог, передвигаются к верши-
не списка (а такими, по практическим соображениям, могут быть только блоки,
размещенные выше средней Реализация этого нового алгоритма приво-
со счетчиками контактов, превышающими этот порог, передвигаются к верши-
не списка (а такими, по практическим соображениям, могут быть только блоки,
размещенные выше средней Реализация этого нового алгоритма приво-
дит к тому, что кэш буфера базы данных становится поддерживаемым тремя списками: главным, вспомогательным и списком замещения. Детали механизма поддержки выходят за рамки книги, но мы надеемся, что, по крайней мере, раздразнили ваш аппетит.
Замечание
Хотя существует документация, позволяющая предположить, что описанный новый алгоритм был реализован в 0racle8, наши исследования "внутренних параметров", необходимых для этого алгоритма, дают основание утверждать, что изменения произошли только в Oracle8i.
< Предыдущая | Следующая > |
---|