15
Массовое вытеснение
Буферное кольцо
часть буферного кеша, выделенная для одной операции
предотвращает вытеснение кеша «одноразовыми» данными
кол-во
операция страниц грязные буферы
последовательное чтение 32 исключаются из кольца
очистка (VACUUM) 32 вытесняются на диск
массовая запись (COPY, CTAS) ≤2048 вытесняются на диск
При операциях, выполняющих массовое чтение или запись данных,
есть опасность быстрого вытеснения полезных страниц из буферного
кеша «одноразовыми» данными. Чтобы этого не происходило, для
таких операций используются так называемые буферные кольца — для
каждой операции выделяется небольшая часть буферного кеша.
При[этом вытеснение действует только в[пределах кольца, поэтому
остальные данные в буфере не страдают.
При последовательном чтении (sequential scan) больших таблиц
используется кольцо размером 32 страницы. Если в процессе
появляются грязные буферы (в результате простановки битов-подсказок
или при выполнении команды UPDATE), они отключаются от кольца,
возвращаются в[основной кеш[и вытесняются уже на общих
основаниях. Вместо отключенного буфера в кольцо из кеша
подключается другой буфер. Такая стратегия рассчитана на то, что
данные в основном читаются, а не меняются.
Если в процессе чтения таблицы другому процессу тоже потребуются
эти данные, он не начинает читать таблицу сначала, а подключается
к[уже имеющемуся буферному кольцу. После окончания сканирования
он дочитывает «пропущенное» начало таблицы.
Для процесса очистки также используется небольшое кольцо
(32[страницы), так как замедление фоновой задачи не столь критично,
как замедление пользовательских процессов.
Наоборот, для массовых операций записи — COPY, CREATE TABLE
AS[SELECT — кольцо имеет достаточно большой размер (обычно 2048
страниц, но не больше одной восьмой всего буферного кеша).