
2.2. Настройка сервера
В то же время не следует устанавливать это значение слишком боль-
шим: это НЕ вся память, которая нужна для работы PostgreSQL, это толь-
ко размер разделяемой между процессами PostgreSQL памяти, которая
нужна для выполнения активных операций. Она должна занимать мень-
шую часть оперативной памяти вашего компьютера, так как PostgreSQL
полагается на то, что операционная система кэширует файлы, и не стара-
ется дублировать эту работу. Кроме того, чем больше памяти будет отдано
под буфер, тем меньше останется операционной системе и другим прило-
жениям, что может привести к своппингу.
К сожалению, чтобы знать точное число shared_buffers, нужно учесть
количество оперативной памяти компьютера, размер базы данных, число
соединений и сложность запросов, так что лучше воспользуемся несколь-
кими простыми правилами настройки.
На выделенных серверах полезным объемом для shared_buffers будет
значение 1/4 памяти в системе. Если у вас большие активные порции ба-
зы данных, сложные запросы, большое число одновременных соединений,
длительные транзакции, вам доступен большой объем оперативной па-
мяти или большее количество процессоров, то можно подымать это зна-
чение и мониторить результат, чтобы не привести к «деградации» (па-
дению) производительности. Выделив слишком много памяти для базы
данных, мы можем получить ухудшение производительности, посколь-
ку PostgreSQL также использует кэш операционной системы (увеличение
данного параметра более 40% оперативной памяти может давать «нуле-
вой» прирост производительности).
Для тонкой настройки параметра установите для него большое значе-
ние и потестируйте базу при обычной нагрузке. Проверяйте использование
разделяемой памяти при помощи ipcs или других утилит(например, free
или vmstat). Рекомендуемое значение параметра будет примерно в 1,2 –2
раза больше, чем максимум использованной памяти. Обратите внимание,
что память под буфер выделяется при запуске сервера, и её объём при
работе не изменяется. Учтите также, что настройки ядра операционной
системы могут не дать вам выделить большой объём памяти (для версии
PostgreSQL < 9.3). В руководстве администратора PostgreSQL описано,
как можно изменить эти настройки.
Также следует помнить, что на 32 битной системе (Linux) каждый про-
цесс лимитирован в 4 ГБ адресного пространства, где хотя бы 1 ГБ за-
резервирован ядром. Это означает, что не зависимо, сколько на машине
памяти, каждый PostgreSQL инстанс сможет обратиться максимум к 3 ГБ
памяти. А значит максимум для shared_buffers в такой системе — 2–2.5 ГБ.
Хочу обратить внимание, что на Windows, большие значения для
shared_buffers не столь эффективны, как на Linux системах, и в результате
лучшие результаты можно будет получить, если держать это значение от-
носительно небольшое (от 64 МБ до 512 МБ) и использовать кэш системы
вместо него.
10