Комментарии 4
effective_cache_size - 50-75% от объёма оперативной памяти сервера
shared_buffers - 25-40% от объёма оперативной памяти сервера
Во-первых, что в данном случае "оперативная память сервера"? PostgreSQL не в вакууме работает, под ним ОС, рядом, возможно, ещё какие-то сервисы и приложения, они тоже памяти хотят - их учитывать будем? Или на них наплевать, считаем от физической памяти, и пусть крутятся, как хотят...
Во-вторых, если размахнуться в обоих параметрах, то сумма превысит объём оперативной памяти сервера. Что, скорее всего, окончится фатально... а какой предел у этой суммы? и да, с учётом упомянутого в "во-первых"... А ещё - как определить, что мы таки хапнули лишнего?
Абсолютно верно, PostgreSQL не работает изолированно, и на сервере могут быть другие сервисы и приложения, которые также требуют оперативной памяти. Под "оперативной памятью сервера" подразумевали доступный пул физической памяти, из которого ресурсы выделяются для всех процессов.
Да, при настройке параметров необходимо учитывать:
ОС: она использует часть оперативной памяти для своих нужд, включая файловый кэш.
Другие приложения: если сервер используется не только для PostgreSQL, но и для других сервисов.
Резерв: всегда стоит оставлять запас оперативной памяти для непредвиденных нагрузок или системных процессов.
Таким образом, расчёт значений shared_buffers и effective_cache_size лучше производить от доступной памяти, остающейся после учёта всех прочих сервисов и ОС.
У вас тоже есть привычка отвечать исключительно на самый первый вопрос? ну я не гордый, повторю:
как определить, что мы таки хапнули лишнего?
Ну или в подробностях - как, по каким показателям или иным (каким?) признакам можно определить, что суммарный объём запрошенной настройками оперативной памяти превышает возможности системы по её выделению? Причём как признакам в ОС (и Windows, и Linux), так и в самом PostgreSQL.
И если такое превышение выявлено - как корректировать настройки. Что их надо уменьшать - очевидно, но какую настройку надо снижать в первую очередь, насколько и почему именно её? какую корреляцию между значениями (например, их соотношение или разность) выдерживать, и опять же почему?
Просьба писать что-то новое, а не то что миллион раз расписано на habr в более подробных инструкциях
Оптимизация PostgreSQL: параметры для ускорения запросов