Рубрики
Uncategorized

Дайте вашим Postgres запросы больше памяти для работы с

Вы получаете уведомления от Heroku Warning о том, что у вас «не хватает временного пространства на своих постгресах … Теги с постгры, база данных, производительность, DevOps.

Вы получаете уведомления от Heroku Warning о том, что у вас «не хватает временного пространства на своем дополнении Postgres»?

Потенциальным исправлением является корректировка work_mem значение для базы данных. Это потребует некоторой настройки для оптимизации базы данных для конкретной нагрузки на запрос, которую она испытывает. Итак, некоторая пробная и ошибка.

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

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

Перед началом работы вы захотите принять к сведению характеристики вашего экземпляра Postgres, где возникают эти ошибки. Вы будете заинтересованы как в доступной оперативной памяти, так и в количестве поддерживаемых соединений.

Сделать больше work_mem

work_mem Значение сообщает Postgres, сколько оперативной памяти позволить запросу потреблять, прежде чем начать писать промежуточные результаты в Временный диск Анкет Предоставление запросов на использование большего количества оперативной памяти — один из способов сокращения количества временного пространства, которое записано. Это должно быть сбалансировано с тем, сколько RAM потребляется в целом. work_mem Значение, вероятно, устанавливается на дефолт 4 МБ (4 мегабайта) — Если это не Анкет

Вы можете проверить это, запустив следующий запрос в PSQL сеанс подключен к целевой базе данных:

> show work_mem;
 work_mem
----------
 4MB
(1 row)

Вы можете начать с изменения его до немного более высокого значения. Слишком высоко И вы могли бы перевернуться от «из временного пространства» к «вне памяти». В зависимости от размера оперативной памяти и количества соединений, вы можете попробовать пойти куда -нибудь от 8 МБ или 16 МБ до 64 МБ. Это будет сильно зависеть от ваших данных и загрузки запросов, поэтому может потребоваться некоторая пробная и ошибка.

Вот как вы можете применить это изменение из PSQL Сессия:

> alter database  set work_mem = '16MB';
ALTER DATABASE

Это изменило базу данных, но это изменение будет применяться только к новым сеансам. Если вы проверете work_mem Для существующего сеанса он будет выглядеть так, как будто он не изменился.

> show work_mem;
 work_mem
----------
 4MB
(1 row)

Выйдите из этого PSQL Запустите новое, чтобы снова проверить это значение. Теперь вы показываете, что это было обновлено до того, что было указано в alter утверждение.

> show work_mem;
 work_mem
---------------
 16MB
(1 row)

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

Итак, как вы выбираете правильное значение work_mem для вашей базы данных и ее загрузки запроса?

Немного грубой математики при выборе значения:

Если у вас 8 ГБ оперативной памяти, и вы ударите work_mem до 16 МБ, тогда потребуется 512 соединений, все они выдвигают их work_mem Пространство, чтобы вызвать ошибку вне памяти. Принимая во внимание, что если вы увеличили его до 64 МБ, то вы смотрите на ~ 128 соединений.

Опять же, это действительно грубые числа, а также не учитывают потребности базовых оперативных операций в экземпляре Postgres. Все это будет зависеть от нагрузки на запрос, который испытывает БД. В зависимости от того, как работает это изменение, вы можете внести дополнительные настройки вверх или вниз, чтобы набрать work_mem ценность, которая имеет больше всего смысла.

Если вам нравится мое письмо, подумайте Присоединяюсь к моей бюллетене или следуя за мной на Твиттер .

Примечания

Если вы используете управляемую службу базы данных, такую как Heroku, настройка по умолчанию для вашего work_mem Значение может зависеть от вашего плана. Например, стандартный план Heroku’s Standard 4 имеет по умолчанию work_mem значение 110 МБ . источник

Ресурсы и дальнейшее чтение

Обложка фото Харрисон Бродбент на Неспособный

Оригинал: «https://dev.to/jbranchaud/give-your-postgres-queries-more-memory-to-work-with-640»