La configuración de 24 MB de shared_buffers es el valor predeterminado conservador, yo diría que debe ser bastante más alto para una base de datos dedicada con 16 GB de RAM disponible. Pero sí, tendrá que reiniciar el servidor para cambiar su tamaño. http://wiki.postgresql.org/wiki/Performance_Optimization es un buen lugar para comenzar con las pautas de configuración de rendimiento. Establecer shared_buffers en 4GB o 6GB parecería más razonable.
Tenga en cuenta que en Linux necesita ajustar la configuración de kernel.shmmax sysctl (en /etc/sysctl.conf o simplemente escribiendo / proc / sys / kernel / shmmax) para asignar un bloque de esta memoria compartida. Si no lo hace, recibirá un error que especifica cuánto se solicitó, debe configurar kernel.shmmax por encima de eso.
Dado que tiene mucha memoria, también puede considerar configurar el work_mem predeterminado más alto, lo que hará que las cosas como ordenaciones y hashes (grupo / orden / distinto, etc.) tiendan a funcionar en la memoria en lugar de usar archivos temporales. No necesita reiniciar el servidor para hacer esto, solo actualice el archivo de configuración, vuelva a cargar el servicio y las nuevas sesiones obtendrán la nueva configuración. La memoria de trabajo predeterminada para una sesión es de 1 MB, puede calcular el máximo que se puede usar a la vez work_mem * max_client_connections
y calcular el impacto que tendrá.
También debe aumentar el tamaño efectivo de caché para indicar al planificador que es probable que la capa FS del núcleo almacene en caché muchas páginas en la memoria fuera de los búferes compartidos de postgresql.
etc. etc. Espero que esto lo lleve a un buen comienzo.
shared_buffers
archivo de configuración postgresql.conf. Este cambio requiere reiniciar. Además, es posible que deba aumentar el valor de/proc/sys/kernel/shmmax
antes.