Общие сведения о общей памяти 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 (оперативная память)
- эффективный размер кэша