Postgres потребляет много оперативной памяти (кэшируется)

dba.stackexchange https://dba.stackexchange.com/questions/117105

Вопрос

У меня есть небольшая база данных PostgreSQL (версия 9.3) на Centos 6 x64 (оперативная память:8 ГБ).

postgresql.conf

max_connections = 512
shared_buffers = 3000MB  
temp_buffers = 8MB          
work_mem = 2MB          
maintenance_work_mem = 128MB         
effective_cache_size = 3000MB

Около 150 подключений, PostgreSQL занимает более 6 ГБ оперативной памяти (конечно, другие приложения используют около 200 МБ оперативной памяти), вот моя информация:

Mem:  7062.945M total, 6892.410M used,  170.535M free, 6644.000k buffers
Swap:    0.000k total,    0.000k used,    0.000k free, 5378.922M cached

Вопросы:

  1. Почему PG занимает много оперативной памяти?

  2. Как я могу уменьшить кэшированные буферы PG?

Это было полезно?

Решение

PostgreSQL не использует много оперативной памяти, ядро использует ее для дискового кэша.

Это именно то, чего вы хотите, чтобы произошло.Здесь нечего исправлять.

"Свободная" оперативная память - это потраченная впустую оперативная память.Лучше всего для сервера баз данных использовать как можно больше оперативной памяти в качестве дискового кэша.

Другие советы

На самом деле, с shared_buffers = 3000MB, Postgres делает возьмите "много" оперативной памяти (условно говоря, для системы объемом 8 ГБ) - даже если не всю оперативную память, как вы, возможно, подумали.И "почему" очевидно:потому что вы проинструктировали его своей настройкой для shared_buffers.Значение велико (по умолчанию равно 128 МБ), однако для выделенного сервера БД это значение кажется все еще разумным.(Более ~ 40% от общего объема оперативной памяти обычно является излишеством.)

Использование Postgres и то , и другое системный кэш и его собственные общие буферы.Общими буферами являются посвященный в Postgres, и память не используется совместно с другими процессами.Они используются для кратковременной буферизации данных и жизненно важны для быстрой обработки.Системный кэш, как правило, более умен и быстр для долгосрочной обработки того, что хранить в кэше, а что извлекать, если возникнет нехватка ресурсов. Ответ @Крейга и тот сайт, который вы нашли объясните, почему системный кэш кажется чтобы съесть всю вашу ОПЕРАТИВКУ.Все это предназначено для Unix / Linux.Windows работает по-другому в некоторых аспектах, я не знаком с деталями.

  • В руководстве содержится подробная информация и инструкции для различных сценариев: Управление ресурсами ядра
  • Тот Самый Postgres Wiki имеет больше советов о том, как установить shared_buffers.

Для "уменьшить кэшированные буферы PG" (и вы действительно можете захотеть сделать это для "небольшая база данных") уменьшите настройку для shared_buffers и перезапустить Postgres:

Этот параметр может быть установлен только при запуске сервера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top