RAM в PostgreSQL
Зачем это знать:
-
если памяти хватает, БД меньше ходит на диск.
-
если памяти мало, сортировки и hash join могут уходить во временные файлы.
Связанные темы:
Мониторинг и диагностика PostgreSQL
Куда тратится RAM
-
shared buffers,
-
файловый кеш ОС,
-
work_mem для Sort/Hash,
-
соединения,
-
временные структуры запроса.
Когда полезно
-
горячие страницы таблиц и индексов в памяти,
-
сортировка помещается в RAM,
-
hash join помещается в RAM,
-
меньше чтений с диска.
Когда плохо
-
слишком много соединений,
-
work_mem слишком большой для многих параллельных запросов,
-
запросы сортируют огромные наборы,
-
hash join не помещается в память.
Пример
SELECT client_id, count(*)
FROM orders
GROUP BY client_id;
Может съедать RAM.
Если RAM мало - пойдёт на диск.
Как снижать
-
следить за temp files,
-
ограничивать размер выборки,
-
проверять план через EXPLAIN,
-
использовать connection pool,
-
аккуратно настраивать work_mem,
-
не запускать тяжёлые отчёты в пик.