PostgreSQL. shared_buffers

Продолжаю изучать конфигурационные параметры PostgreSQL (конкретно сейчас – PostgreSQL 10). В этот раз рассмотрю очень важный параметр shared_buffers.

Конфигурационные параметры PostgreSQL лежат в каталоге с данными (PGDATA) в файле postgresql.conf.

  • Параметр: shared_buffers
  • Раздел: Использование ресурсов / Память
  • Изменение: Требует перезагрузки сервера
  • Принимаемое значение: integer
  • Минимальное значение: 16 (128 кБ)
  • Максимальное значение: 1073741823 блоков (~8586 Гб)
  • Значение по умолчанию: 128МБ. А точнее: 16384 страниц по 8 кБ
  • Особенность: последние значения, которые не кратны восьми, отбрасываются. То есть, если задать значение в кБ: 129 (130, 131 и до 135 включительно), значения свыше 128 и до 136 не будут учтены.
  • Взаимосвязь: Параметр shared_buffers связан с параметром ядра linuxshmmax. С параметрами ядра я не разбирался еще. Но параметр kernel.shmmax в ОС должен быть больше, чем shared_buffers в PostgreSQL.
  • Описание: В параметре shared_buffers устанавливается количество буферов в общей памяти, используемых сервером PostgreSQL.

Процессы, порождаемые при подключении клиента к PostgreSQL (максимальное количество таких процессов указывается в параметре max_connections), должны где-то хранить те строки, которые получают с диска (и те строки, которые собираются на диск записать) – хранят их в восьмикилобайтных (по умолчанию) блоках в совместной памяти – в shared_buffers.

PostgreSQL использует двойное кэширование данных – сначала в кэше ОС, а потом уже в собственном кэше. Так что не нужно устанавливать в shared_buffers всю доступную оперативную память.

Какой-то идеального значения для shared_buffers нет. Нужно смотреть на вашу нагрузку – какой объем базы, сколько подключений, какой сложности будут запросы и т.д. Оптимальное стартовое значение для начала экспериментов по настройке shared_buffers – четверть от доступной оперативной памяти.

  • Как посмотреть
    • Команда SHOW shared_buffers (отработает как для psql, так и в pgAdmin), автоматически выдает значение в килобайтах-мегабайтах:

shared_buffers. show

    • Запросом: select * from pg_settings s where name = ‘shared_buffers’, обратите внимание на поле В поле setting хранится значение, которое еще нужно умножить на unit, чтобы получить значение к кБ или МБ (что автоматом выдает SHOW shared_buffers):

shared_buffers. query

  • Эксперименты:

Хотел опубликовать описание параметра shared_buffers и свои эксперименты с ним в одной статье. Но получилось слишком много материала, поэтому решил разбит – эксперименты отдельно опубликовать. Завтра это сделаю.


Be the first to comment

Leave a Reply

Ваш Mail не будет опубликован.


*