Dentro del proceso de instalación de Postgre, ya hemos explicado como montar el recurso para albergar los datos de Postgre y como instalar y configurar PotgreSQL
Instalación de PostgreSQL – Parte 1 – Optimización del sistema de ficheros
Instalación de PostgreSQL – Parte 2 – Instalación y configuración de PostgreSQL
Ahora vamos a optimizar el «kernel», bueno os explicare la mayor parte de los parámetros, pero esta vez el post estará basado en la documentación http://www.postgresql.org/docs/9.1/static/kernel-resources.html, por si queréis ampliar más información.
Lo que normalmente suele pasar es que modificamos los valores del postgres.conf olvidarnos del sistema, por ello cuando sobredimensionamos empiezan los problemas, ya que Linux se nos queda «corto», para evitar esto debemos tener dos conceptos muy claros, la memoria compartida y los semáforos.
Bueno pues vamos por partes, primero la memoria compartida.
Los valores que vamos a tocar son lo siguientes, con su explicación pertinente.
Memoria Compartida
- SHMMAX
El valor por defecto del núcleo es 32MB, es el tamaño de un segmento de memoria compartido. Existen varios parámetros en postgresql.conf que determinan cuanta memoria compartida necesitaremos, por ello en la mayor parte de las situaciones debemos aumentar SHMMAX como mínimo al mismo tamaño del shared_buffers, pero un poco mas siempre es mejor ya que como digo hay mas valores que comparten esta variable.
- SHMMIN y SHMALL
El SHMMIN como os podéis imaginar es el valor mínimo y el SHMALL que debe ser SHMMAX/PAGE_SIZE, donde el PAGE_SIZE sera 4kb, lo podemos comprobar con getconf PAGESIZE.
- fs.file-max
Numero de descripores a fichero, deberemos aumentarlo dependiendo de la ram, se puede calcular 256 por cada 4M de RAM, o ir controlando el valor cuando postgre este trabajando, de forma fácil con
lsof | wc -l
Semáforos
Bueno basándonos en la documentación las formulas para calcularlo son algo tal que así.
- SEMMNI
ceil((max_connections + autovacuum_max_workers) / 16). El valor por defecto del núcleo suele ser 128
- SEMMNS
ceil((max_connections + autovacuum_max_workers) / 16) * 17 + lo necesario por otras aplicaciones. El valor por defecto del núcleo suele ser 32000
- SEMMSL
Como minimo 17. El valor por defecto del núcleo suele ser 250
- SEMMAP
En algunos casos tiene que ser igual a SEMMNS
- SEMVMX
Como mínimo 1000. El valor por defecto del núcleo suele ser 32767
- SEMOPM
El valor por defecto del núcleo suele ser 32
- SEM
Es igual a «SEMMSL SEMMNS SEMOPM SEMMNI»
Y ahora que los tenemos vamos aplicarlos al sistema, la parte de memoria primero, haremos.
vim /etc/sysctl.conf
Añadiremo o modificaremos las siguientes lineas.
kernel.shmmax = 68719476736 kernel.shmall = 4294967296 fs.file-max = 1048576
Ahora los semáforos.
Contando con la explicación se modifica con la variable kernel.sem =250 32000 32 12, en mi caso realice los cálculos que nos da la documentación y con los valores por defecto del sistema ya esta bien, pero bueno no esta de más saber como modificarlos.
Bueno resumiendo después de las tres partes debemos tener un Postgre instalado y configurado de una forma un poco diferente a la típica instalación y por norma general en el futuro nos empieza a dar problemas, por último solo nos quedara montar la replicación con eso ya tendremos un sistema listo para producción.
Ale a disfrutarlo!
2 comentarios en «Instalación de PostgreSQL – Parte 3 – Optimización del sistema operativo»