Как стать автором
Обновить

Оптимизация PostgreSQL: параметры для ускорения запросов

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров4K
Всего голосов 9: ↑8 и ↓1+7
Комментарии4

Комментарии 4

effective_cache_size - 50-75% от объёма оперативной памяти сервера

shared_buffers - 25-40% от объёма оперативной памяти сервера

Во-первых, что в данном случае "оперативная память сервера"? PostgreSQL не в вакууме работает, под ним ОС, рядом, возможно, ещё какие-то сервисы и приложения, они тоже памяти хотят - их учитывать будем? Или на них наплевать, считаем от физической памяти, и пусть крутятся, как хотят...

Во-вторых, если размахнуться в обоих параметрах, то сумма превысит объём оперативной памяти сервера. Что, скорее всего, окончится фатально... а какой предел у этой суммы? и да, с учётом упомянутого в "во-первых"... А ещё - как определить, что мы таки хапнули лишнего?

Абсолютно верно, PostgreSQL не работает изолированно, и на сервере могут быть другие сервисы и приложения, которые также требуют оперативной памяти. Под "оперативной памятью сервера" подразумевали доступный пул физической памяти, из которого ресурсы выделяются для всех процессов.

Да, при настройке параметров необходимо учитывать:

  1. ОС: она использует часть оперативной памяти для своих нужд, включая файловый кэш.

  2. Другие приложения: если сервер используется не только для PostgreSQL, но и для других сервисов.

  3. Резерв: всегда стоит оставлять запас оперативной памяти для непредвиденных нагрузок или системных процессов.

Таким образом, расчёт значений shared_buffers и effective_cache_size лучше производить от доступной памяти, остающейся после учёта всех прочих сервисов и ОС.

У вас тоже есть привычка отвечать исключительно на самый первый вопрос? ну я не гордый, повторю:

как определить, что мы таки хапнули лишнего?

Ну или в подробностях - как, по каким показателям или иным (каким?) признакам можно определить, что суммарный объём запрошенной настройками оперативной памяти превышает возможности системы по её выделению? Причём как признакам в ОС (и Windows, и Linux), так и в самом PostgreSQL.

И если такое превышение выявлено - как корректировать настройки. Что их надо уменьшать - очевидно, но какую настройку надо снижать в первую очередь, насколько и почему именно её? какую корреляцию между значениями (например, их соотношение или разность) выдерживать, и опять же почему?

Просьба писать что-то новое, а не то что миллион раз расписано на habr в более подробных инструкциях

Зарегистрируйтесь на Хабре, чтобы оставить комментарий