Менеджер кэша дисковых блоков TARQ

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

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

QHB может запускаться с усовершенствованным алгоритмом вытеснения, называемым TARQ.

Алгоритм предполагает поддержку двух списков страниц, L1 и L2. Максимальная длина обоих списков составляет 2c, где c — размер кэша в страницах. Оба списка формируются в стиле LRU. При перемещении в кэш страницы, номер которой отсутствует в обоих списках, этот номер заносится в начало списка L1. При обращении к странице, номер которой фигурирует в одном из списков, этот номер переносится в начало списка L2. Важной особенностью алгоритма является то, что только в начале каждого из списков (в подсписках T1 и T2) располагаются номера страниц, находящихся в кэше; таким образом поддерживается история страниц, недавно вытесненных из кэша. Страница для замещения выбирается из конца подсписка T1 или T2 в зависимости от значения параметра p, определяющего текущую допустимую длину подсписка T1, а тем самым, и длину T2. Адаптивность алгоритма состоит в том, что значение p изменяется в зависимости от вида рабочей нагрузки.

Для включения и управления новым алгоритмом вытеснения используются параметры в конфигурационном файле:

use_qhb_cache (boolean)

Логический параметр. При установке значения в true будет использоваться новая версия кэша.

qhb_cache_size (integer)

Общий размер буферного кэша (при включении use_qhb_cache=true значение shared_buffers не используется).

shared_buffers_partitions (integer)

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

Рекомендуемое значение: 128.

tarq_cache.touch_queue_ignore (integer)

Процент заполнения фрагмента кэша при котором обращения начинают приводить к операциям балансировки. Может принимать значения от 1 до 100 (целые числа). Для незаполненного или заполненного частично фрагмента балансировок не требуется.

Рекомендуемое значение: 50.

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

tarq_cache.touch_window (integer)

Время в секундах. Все обращения в течение этого периода считаются одним обращением.

Рекомендуемое значение: 3.

tarq_cache.touch_threshold (integer)

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

Рекомендуемое значение: 5.