Pregunta

Tengo una pequeña base de datos PostgreSQL (v9.3) en Centos 6 x64 (RAM:8GB).

postgresql.conf

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

Aproximadamente 150 conexiones, PostgreSQL requiere más de 6 GB de RAM (por supuesto, otras aplicaciones usan aproximadamente 200 MB de RAM), aquí mi información:

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

Preguntas:

  1. ¿Por qué PG requiere mucha RAM?

  2. ¿Cómo puedo reducir los buffers en caché de PG?

¿Fue útil?

Solución

PostgreSQL no está usando mucha RAM, el kernel lo está utilizando para caché de disco.

Esto es exactamente lo que quieres que suceda.No hay nada que arreglar aquí.

"Gratis" RAM se desperdicia RAM.Lo mejor para un servidor de base de datos es la mayor cantidad de RAM posible para ser utilizada como caché de disco.

Otros consejos

En realidad, con shared_buffers = 3000MB, postgres hace necesita "mucha" RAM (relativamente hablando para un sistema con 8 GB), aunque no toda la RAM, como habrá estado pensando.Y el "por qué" es obvio:porque lo instruiste con tu configuración para shared_buffers.La configuración es alta (el valor predeterminado es 128 MB), aunque para un servidor de base de datos dedicado la configuración todavía parece razonable.(Más de ~ 40% de la RAM total suele ser excesiva).

Usos de Postgres ambos el caché del sistema y sus propios buffers compartidos.Los buffers compartidos son dedicado a Postgres y la memoria no se comparte con otros procesos.Se utilizan para el almacenamiento en búfer de datos a corto plazo y son vitales para un procesamiento rápido.El caché del sistema es generalmente más inteligente y rápido para el manejo a largo plazo de qué mantener en caché y qué expulsar si se le presionan por recursos. La respuesta de @Craig y el sitio que encontraste explique por qué el sistema de caché parece para comer toda tu RAM.Todo esto es para Unix/Linux.Windows funciona diferente en algunos aspectos, no estoy familiarizado con los detalles.

A "reducir los buffers en caché de PG" (y es posible que desees hacer eso por un "pequeña base de datos") baje el ajuste para shared_buffers y reiniciar Postgres:

Este parámetro solo se puede configurar al iniciar el servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top