20 ago

Instalación de PostgreSQL – Parte 2 – Instalación y configuración de PostgreSQL

Hoy vamos a explicar como instalar y configurar PostgreSQL, la verdad es que hay miles de documentos por internet que lo explican, pero necesito explicar ciertos valores de la configuración de PostgreSQL para poder explicar en el siguiente como configurar los parámetros del kernel.

Pues venga vamos al tema, nos ponemos en situacion, en el post anterior(Instalación de PostgreSQL – Parte 1 – Optimización del sistema de ficheros), explique como configurar y montar la partición que utilizaremos para nuestro PostgreSQL.

Pues vamos a instalarlo de forma sencilla, tenemos un RedHat 6, vamos a mirar el paquete que tenemos disponible en el repositorio y a ver si es una versión nueva, al menos la 9.2, para ver esto con un simple yum info lo veremos.

yum info postgresql.x86_64
Loaded plugins: product-id, rhnplugin, security, subscription-manager
Available Packages Name        : postgresql
Arch        : x86_64
Version     : 8.4.13 

Es mi caso tenemos una 8.4.13, era de esperar, RedHat es famoso por sus paquetes actualizados en los repositorios oficiales,  vamos a montar el repositorio oficial de PostgreSQL tal que así.

wget http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-redhat92-9.2-7.noarch.rpm
rpm -ivh pgdg-redhat92-9.2-7.noarch.rpm
yum update
yum  --disablerepo="*" --enablerepo="pgdg92" info postgresql92-server.x86_64
Loaded plugins: product-id, rhnplugin, security, subscription-manager
Available Packages Name        : postgresql92-server
Arch        : x86_64
Version     : 9.2.4 Release     : 1PGDG.rhel6
Size        : 3.8 M Repo        : pgdg92 

Pues venga ahora a instalar.

yum  --disablerepo="*" --enablerepo="pgdg92" install postgresql92.x86_64 postgresql92-server.x86_64
service postgresql-9.2 initdb
/etc/init.d/postgresql-9.2 start

Ya esta esto instalado.

Pues vamos a por el fichero de configuración a tocar alguna cosilla, os explico las variables que vamos a tocar y después las modificamos, pensar que igual no queréis modificar las mismas o igual hay algunas que necesitáis para vuestra aplicación.

Como sabeis el fichero que debemos tocar es el postgresql.conf, pensar que esto no son reglas 100% ciertas y depende mucho de nuestro servidor y sobretodo del servicio que se le vaya a dar al postgre, en mi caso esta  destinado a DWH, asi que las valores que pongo irán encarados a este fin.

Opciones de configuración

  • listen_addresses = ‘*’

Ip por la cual estará escuchado el servicio

  • temp_buffers = 16MB

Tamaño máximo de buffers que se podrán reservar por sesión.

  • maintenance_work_mem = 3840kB

Memoria utilizada para la creación de índices, dependiendo de volumen de datos que tengamos la creación de índices puede ser muy costosa, así que es bueno no escatimar en este valor.

  • work_mem = 16MB

Uno de los valores más importantes y más despreciados, “work_mem” se refiere a la memoria temporal utilizada por cada sesión, para las operaciones de ordenamiento (ORDER BY) para las sesiones de diferenciación (GROUP … HAVING y DISTINCT) y para la gestión de hash (uniones HASH, indices HASH, hash_aggregations), si en nuestro sistema realizamos muchísimas consultas ordenadas, agrupadas, diferenciadas por cadenas, etc se crearán mucho de estos buffers de manera paralela, mientras más memoria asignemos, menos probabilidades hay que los ordenamientos y otras operaciones se hagan con archivos temporales en disco (más lentos que la memoria RAM).

  • checkpoint_completion_target = 0.9

Especifica el target of checkpoint completion

  • effective_cache_size =  22GB

Este valor es el encargado de decirle a postgre si en el proceso de optimización de la sentencia le podrá ponerla en memoria o no, así que si podemos darle un valor grandote haremos que las sentencias entren la mayoría en RAM con lo que nos ira mas rápido, una política conservadora puede ser asignar más o menos el 50% de la memoria disponible.

  • wal_buffers = 32MB

Es el tamaño de los segmentos WAL que aun no se han escrito en disco, este valor debe ser un 3% del shared_buffers, nunca menos de 64kb, pensemos que cada vez qaue grabamos la transaccion en disco es una bajada de rendimiento.

  • checkpoint_segments = 64

Numero de segmentos entre el WAL, con un numero más grande tendremos mas retención en el caso de fallo, pero tardara mas en recuperar.

  • shared_buffers = 7680kB

Es la memoria de trabajo compartida para todo el servidor postgreSQL, fíjese que por defecto en Debian GNU/Linux la opción es 24MB (y el valor por defecto si comentamos es 32MB), sin embargo, como esta es la memoria utilizada para trabajo de postgreSQL, es recomendable “al menos” el 25% de la RAM disponible (y jamás > 40%).

  • max_connections = 200

Pues eso

  • max_stack_depth = 8M

Define el tamaño del espacio utilizado para cómputo de operaciones complejas, su valor está asociado al límite máximo que un usuario (en este caso, “postgres”) tiene derecho a reservar un stack, el valor soportado por nuestro sistema operativo, que lo determinamos con “ulimit -s”, y lo modificaremos en el siguiente post.

  • superuser_reserved_connections = 3

Reservamos conexiones, por si en alguno momento tenemos la base de datos con max_connection y necesitamos entrar!

Como sabréis hay miles de opciones más, pero estas creo que son las más importantes, por supuesto os recomiendo la documentación de PostgreSQL ya que es muy buena, ahora las buscamos o añadimos en el postgresql.conf y reiniciamos el servicio.

Y con todo esto reiniciamos el servicio y ya tenemos la segunda parte de la instalación montada.

Ale a disfrutarlo!

3 thoughts on “Instalación de PostgreSQL – Parte 2 – Instalación y configuración de PostgreSQL

  1. Pingback: Instalación de PostgreSQL – Parte 3 – Optimización del sistema operativo | maauso

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

  3. 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>