Как работает выделение памяти для postgres? - PullRequest
0 голосов
/ 10 февраля 2020
  1. shared_buffers - при обычной установке PostgreSQL, скажем, я выделяю 25% моей памяти для shared_buffers, что означает, что он оставляет 75% для отдыха, такого как ОС, кэш страниц и work_mems et c. Правильно ли мое понимание? Если это так, AWS Aurora для Postgres использует 75% памяти для shared_buffers, тогда оставалось бы только 25% для других вещей?
  2. Распределяет ли память, указанная для work_mem, полностью выделяется для всех сеансов независимо от того, выполняют ли они какие-либо операции сортировки или хеширования?

1 Ответ

2 голосов
/ 10 февраля 2020

Ваше первое утверждение обязательно верно:

Если 75% ОЗУ используется для общих буферов, , то только 25% доступно для других вещей, таких как обработать личную память.

work_mem - это верхний предел памяти, которую одна операция («узел») в плане выполнения готова использовать для таких операций, как создание ha sh или растровое изображение или сортировка. Это не означает, что каждая операция выделяет столько памяти, это всего лишь предел.

Без претензий на абсолютную надежность, вот мое личное правило:

shared_buffers + max_connections * work_mem должно быть меньше или равно доступной оперативной памяти. Тогда вам вряд ли хватит памяти.

...