Общие сведения о общей памяти PostgreSQL

Завершено

PostgreSQL использует память, которую можно классифицировать как:

  • локальная память — выделенная для каждого процесса
  • Разделяемая память — используется всеми процессами

Локальная память

Для каждого процесса в PostgreSQL требуется память для обработки запросов. Следующие параметры сервера позволяют определить использование памяти.

work_mem определяет память, необходимую для сортировки кортежей для операций ORDER BY и DISTINCT. Этот параметр определяет объем памяти, доступный для внутренних операций сортировки и хэш-таблиц. Если у вас есть большой объем доступной памяти и у рабочей нагрузки есть запросы с сложной сортировкой, увеличение этого значения параметра может повысить производительность, разрешив больший объем сканирования в памяти перед разливом на диск.

Однако один сложный запрос может иметь множество операций сортировки и хэша, выполняемых одновременно. Каждая операция использует столько памяти, сколько это значение позволяет, прежде чем начать запись во временные файлы на диске. На занятой системе, таким образом, общее использование памяти во много раз превышает индивидуальный параметр work_mem.

Чтобы настроить это значение, используйте total RAM * 0,25 / max_connections в качестве начального значения.

maintenance_work_mem — это память, требуемая вакуума, а переиндексировать. Этот параметр определяет объем памяти, доступный для внутренних операций сортировки и хэш-таблиц. Значение по умолчанию равно 64 КБ, но увеличение этого значения повышает производительность для вакуумирования.

autovacuum_work_mem задает максимальный объем памяти, используемый каждым процессом автовакума.

temp_buffers определяет память для хранения временных таблиц. Этот параметр задает максимальное количество временных буферов, используемых каждым сеансом базы данных.

effective_cache_size определяет объем доступной памяти для кэширования диска операционной системой и в базе данных. Планировщик запросов PostgreSQL определяет, зафиксирована ли память в ОЗУ. Проверки индекса, скорее всего, будут использоваться для более высоких значений; в противном случае последовательное сканирование используется, если значение низко.

Установите для effective_cache_size значение, равное 50% от общего объема ОЗУ системы.

Общая память

Общая память выделяется при запуске. Общая память используется для:

shared_buffers определяет буферы общей памяти, используемые сервером. PostgreSQL загружает страницы таблиц и индексов из постоянного хранилища в общий буферный пул, а затем работает над ними в памяти. Этот общий буферный пул является основным компонентом общей памяти, используемой сервером. Значение по умолчанию — 128 МБ (в зависимости от уровня вычислений). Если вы решите выделить больше памяти, необходимо перезапустить сервер.

wal_buffers определяет количество буферов страниц диска в общей памяти для записи перед записью в постоянное хранилище.

Вкратце, важные параметры сервера, относящиеся к памяти, которые вы можете настроить:

  • разделяемые_буферы
  • work_mem
  • эффективный размер кэша