tgoop.com/sqlhub/2035
Last Update:
🗄 MySQL vs Postgres: как кэшируют страницы данных
⚡ Подходы разные:
- MySQL (InnoDB) стремится всё держать под своим контролем
- Postgres больше доверяет операционной системе
MySQL / InnoDB
- Своя память под кэш: innodb_buffer_pool_size
обычно = 70%+ RAM на выделенном сервере
- Обход кэша ОС: с innodb_flush_method='O_DIRECT'
InnoDB работает напрямую с диском
- Двухсекционный LRU: страницы сначала в old
, только потом (через innodb_old_blocks_time`) в `young
. Это спасает от «выметания» кэша при больших сканах
Postgres
- Внутренний кэш + page cache ОС: shared_buffers
обычно около 30% RAM, остальное оставляют ОС
- Clock-sweep: у страницы счётчик обращений, уменьшается при «прокрутке часов». Когда падает до нуля — страница освобождается
Практические выводы
- Bulk-операции: InnoDB устойчивее к «пробиванию» кэша, в Postgres часть нагрузки идёт в кэш файловой системы
- Тюнинг памяти: в MySQL раздувают buffer pool, в Postgres shared_buffers умеренный, а остальное доверяют ОС
Что стоит проверить в бенчмарках Postgres
- Размер shared_buffers
: 4% / 10% / 30% / 50% RAM
- Сценарии: OLTP, последовательные сканы, смешанные нагрузки
- Рабочий набор: меньше / равен / больше доступной RAM
- Метрики: TPS/QPS, p95/p99 латентность, hit ratio, про
https://github.com/postgres/postgres/blob/master/src/backend/storage/buffer/README
BY Data Science. SQL hub

Share with your friend now:
tgoop.com/sqlhub/2035