====== Configuracion de postgresql ======
===== Ajustes básicos a la instalación de PostgreSQL =====
Esta guía pretende ser una introducción inicial a los parámetros que se deben modificar en la instalación de postgreSQL para mejorar su desempeño. La base de datos viene configurada por default para funcionar en sistemas muy pequeños, por lo que es recomendable ajustarla. No se pretende crear una guía extensiva sobre todos los parámetros que afectan el motor de base de datos, sino una guía rápida e introductoria con algunos consejos prácticos para Libertya.
===== Generales del sistema =====
==== Shared Memory ====
La base de datos usa mucha memoria compartida, por lo que es uno de los recursos importantes a configurar. Los valores default de Linux suelen ser adecuados, pero por las dudas vale revisarlos...
Los siguientes parámetros del kernel de linux afectan la memoria compartida:
* **SHMMAX**: Tamaño máximo de un segmento de memoria compartida (bytes)
* **SHMMIN**: Tamaño mínimo de un segmento de memoria compartida (bytes)
* **SHMALL**: Cantidad máxima de memoria compartida disponible (bytes ó páfinas)
* **SHMSEG**: Número máximo de segmentos de memoria compartida por proceso
* **SHMMNI**: Número máximo de segmentos de memoria compartida en todo el sistema
De todos estos, los fundamentales son SHMMAX y SHMMALL
**SHMMAX**: Varios MB. El valor por defecto del núcleo es 32MB, un valor muy bajo en muchos casos. Existen varios parametros en postgresql.conf
que determinan cuanta memoria compartida necesitaremos, el más importante de ellos y el principal causante de que necesitemos aumentar SHMMAX es shared_buffers
. El valor de SHMMAX (bytes) no puede ser menor que el valor definido en shared_buffers
. PostgreSQL se negará a arrancar si el valor de SHMMAX es muy pequeño.
**SHMALL** Como mínimo SHMMAX/PAGE_SIZE
. En donde el valor de PAGE_SIZE
lo podeis obtener ejecutando el comando getconf PAGESIZE
. El valor por defecto del núcleo es 2097152 pages (8192MB). Si teneis varios clusters de PostgreSQL ejecutandose en la máquina ó otros programas que usen memoria compartida, tendreis que definir un valor de SHMALL
lo suficientemente grande para poder ejecutar todos estos programas a la vez.
Para cambiar el valor de estos parámetros permanentemente tenemos que editar el fichero /etc/sysctl.conf
, y añadir la linea:
kernel.shmmax = 2147483648
Para instalar los cambios tenemos que ejecutar el comando
sysctl -p /
etc/sysctl.conf
Lo mismo para shmmin.
===== Propios de PostgreSQL =====
Los siguientes parámetros se configuran en el archivo postgresql.conf en el directorio data de la instalación.
==== max_connections ====
Se debe asignar este valor al 140% del promedio de conexiones esperados. Cada cliente utiliza en promedio 3 conexiones, por lo que se debe considerar un
=3.4 * (cantidad_de_usuarios)
El valor inicial es 100, que es suficiente para instalaciones chicas. Asignarlo a valores como 200 o 300 no debe plantear inconvenientes.
==== shared_buffers ====
Se puede asignar de 1/4 a 1/2 de la memoria física del sistema. Se calculan en bloques de 8k así que 256M serían 32768 = 1024*1024*256/8192.
==== work_mem ====
Es la memoria que se utiliza para resolver las consultas. El default es 1M, pero se puede asignar a 2M sin miedo. No es recomendable asignar un valor mucho mas alto dado que cada query podrá utilizar esta memoria, de modo que el consumo de memoria puede crecer mas de lo previsto.
==== effective_cache_size ====
Este parámetro permite a PostgreSQL hacer el mejor uso posible de la RAM disponible. Le indica el tamaño del cache de datos del sistema operativo. Se puede asignar a valores entre 1/4 y 1/2 memoria física sin problemas. Se debe considerar que debe quedar espacio de memoria para los demás programas que corran en el sistema.
==== max_fsm_relations ====
Indica la cantidad de tablas a seguir en el mapeo de espacio libre. Para el caso de libertya, elevarlo a 2000.
==== Autovacuum ====
Inicia el demonio que optimiza y el uso de disco de las tablas dentro del sistema. Es necesario habilitarlo para que realice las tareas de mantenimiento de forma automática
===== Fuentes =====
[[http://www.postgresql.org/docs/8.2/static/kernel-resources.html|http://www.postgresql.org/docs/8.2/static/kernel-resources.html]]
[[http://wiki.postgresql.org/wiki/Performance_Optimization|http://wiki.postgresql.org/wiki/Performance_Optimization]]
[[http://www.varlena.com/GeneralBits/Tidbits/perf.html|http://www.varlena.com/GeneralBits/Tidbits/perf.html]]
[[http://www.varlena.com/GeneralBits/Tidbits/annotated_conf_e.html|http://www.varlena.com/GeneralBits/Tidbits/annotated_conf_e.html]]