linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/kb/Буферный кеш и WAL/buffer-states

kb/buffers-wal ── Буферный кеш и WAL ── intermediate

Четыре состояния буфера

Любое обращение к данным сводится к одному из четырёх исходов: hit (страница в кеше), read (промах, чтение с диска), dirtied (изменён в памяти), written (сброшен на диск). Соотношение hit к read показывает эффективность кеша; в PG16 их детально считает pg_stat_io.

view as markdownaka: buffer-hit-read, pg-stat-io, cache-hit-ratio

Четыре исхода

  • hit - нужная страница уже в кеше, диск не трогается. Самый дешёвый;
  • read - страницы в кеше нет, её читают с диска в свободный буфер (промах);
  • dirtied - буфер изменили в памяти, теперь он «грязный» и отличается от диска;
  • written - грязный буфер сбросили на диск (bgwriter, checkpointer или сам бэкенд).

Чем выше доля hit к read, тем меньше обращений к диску. Объём записей показывает нагрузку на запись.

Где смотреть

Простой срез по таблице:

sql
SELECT heap_blks_hit, heap_blks_read
FROM pg_statio_user_tables WHERE relname = 'flights';

Подробно, с PostgreSQL 16, - pg_stat_io: разбивка по типу backend'а, объекту и виду операции (чтения, записи, попадания, вытеснения, расширения файла):

sql
SELECT backend_type, object, context, reads, writes, hits
FROM pg_stat_io WHERE reads > 0 OR writes > 0;

Как читать

  • много read после прогрева - данные не помещаются в кеш или его вымывает большой скан (см. buffer-ring);
  • много written бэкендами (в pg_stat_io контекст normal, backend не bgwriter/checkpointer) - bgwriter не поспевает или shared_buffers мал;
  • высокий hit-ratio при нагрузке - кеш работает, узкое место в другом.

Состояния - это поведение buffer-cache в цифрах. По ним судят, помог ли кеш конкретному запросу.

§ команды

bash
SELECT heap_blks_hit, heap_blks_read FROM pg_statio_user_tables WHERE relname='flights';

Попадания и чтения с диска по таблице

bash
SELECT * FROM pg_stat_io WHERE reads > 0;

Детальная статистика ввода-вывода (PG16): hit/read/write/evict

§ см. также

  • buffer-cacheБуферный кеш и вытеснениеБуферный кеш - разделяемая память (shared_buffers), нарезанная на буферы по 8 КБ. Все бэкенды работают с одним кешем. Когда место кончается, буфер выселяется по приближённому алгоритму clock-sweep (счётчик usage_count), а не по честному LRU.
  • buffer-ringБуферное кольцо для seq scanБольшой последовательный скан или VACUUM не используют весь кеш, а крутят данные через маленькое буферное кольцо в несколько сотен КБ - иначе один отчёт вымыл бы весь кеш. Кольцо включается, когда таблица больше четверти shared_buffers.
  • checkpointКонтрольные точки и восстановлениеКонтрольная точка сбрасывает все грязные буферы на диск и фиксирует redo point - позицию журнала, с которой начнётся восстановление. Crash recovery проигрывает WAL от redo point вперёд; незакоммиченные транзакции откатываются через clog. Запускается по checkpoint_timeout / max_wal_size.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки