Максим Милютин, openGauss и PostgreSQL contributor, на PG BootCamp Russia 2024 Kazan, раскрыл внутренние особенности разделяемого буфера, или буферного менеджера, как одного из наиболее «горячих» мест в нагруженной СУБД.
✏️Он описал работу буфера от простейшей модели до актуального состояния в Postgres, затронув сложные и малопонятные участки кода, сделал обзор процессов вокруг буфера, текущих и потенциальных средств его мониторинга и инструментации, нюансов реализации (избежание конкуренции при allocation/replacement, обновременная работа с буфером при replacement) и оптимизирующих конструкций. Отдельное внимание было уделено таким темам, как стратегия вытеснения ring buffer, мониторинг и scan sharing.
🔩 Структура буферного кеша:
– разделяемая хэш-таблица (Page table) для ведения страниц в кеше, она хранит указатели и метаданные (флаг dirty, счетчики pin и reference, состояние ячейки, информация о доступе);
– буферный пул (Buffer pool), хранящий загруженные страницы и пустые фреймы.