Видеозаписи выступлений

Разделяемый буфер. Внутрянка

Максим Милютин, openGauss и PostgreSQL contributor, на PG BootCamp Russia 2024 Kazan, раскрыл внутренние особенности разделяемого буфера, или буферного менеджера, как одного из наиболее «горячих» мест в нагруженной СУБД.

Он описал работу буфера от простейшей модели до актуального состояния в Postgres, затронув сложные и малопонятные участки кода, сделал обзор процессов вокруг буфера, текущих и потенциальных средств его мониторинга и инструментации, нюансов реализации (избежание конкуренции при allocation/replacement, одновременная работа с буфером при replacement) и оптимизирующих конструкций. Отдельное внимание было уделено таким темам, как стратегия вытеснения ring buffer, мониторинг и scan sharing.

Структура буферного кеша:
  • разделяемая хэш-таблица (Page table) для ведения страниц в кеше, она хранит указатели и метаданные (флаг dirty, счетчики pin и reference, состояние ячейки, информация о доступе);
  • буферный пул (Buffer pool), хранящий загруженные страницы и пустые фреймы.
Казань 2024