Общие сведения о общей памяти 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 определяет количество буферов страниц диска в общей памяти для предварительной записи (WAL) перед записью в постоянное хранилище.

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

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