22 ago

Instalación de PostgreSQL – Parte 3 – Optimización del sistema operativo

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 thoughts on “Instalación de PostgreSQL – Parte 3 – Optimización del sistema operativo

  1. Pingback: Instalación de PostgreSQL – Parte 4 – Configuración de la replicación | maauso

  2. Pingback: Resumen – Instalación de PostgreSQL 9.2 optimizada para sistemas de producción | Miguel Ángel Ausó

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>