lunes, 25 de febrero de 2008

Configuracion Postgres - Inicio

No es la primera vez que algun asuario protesta o esta super preocupado de lo mal y lo lento que funciona su cluster de base de datos PostgreSQL en un servidor ultimo modelo con muchisima memoria. Normalmente el problema es que PostgreSQL no ha sido configurado para trabajar con el volumen de datos y usuarios con el que lo estamos usando. No es una gran ayuda tener un servidor con varios GBytes de memoria RAM si le hemos dicho a PostgreSQL, por ejemplo, que no utilice más de 32MBytes.

Tambien tenemos que decir que cualquier base de datos que se este usando activamente, no solo PostgreSQL, es un elemento dinamico y vivo en el que estamos cambiando los datos constantemente y donde el tamaño de los datos almacenados suele ir creciendo con el tiempo. Esto significa que una configuracion que funcione bien con ciertos valores hoy, puede que no funcione tan bien despues de un año de uso y que necesite ajustarse para que funcione optimalmente.

Configuración

El comportamiento de PostgreSQL en nuestro sistema se puede controlar con tres ficheros de configuración que se encuentran en el directorio de datos donde inicializamos nuestro cluster PostgreSQL (En nuestro caso /var/pgsql/data). Estos tres ficheros son:

  • pg_hba.conf: Este fichero se utiliza para definir los diferentes tipos de accesos que un usuario tiene en el cluster.
  • pg_ident.conf: Este fichero se utiliza para definir la información necesaria en el caso que utilicemos un acceso del tipo ident en pg_hba.conf .
  • postgresql.conf: En este fichero podemos cambiar todos los parametros de configuracion que afectan al funcionamiento y al comportamiento de PostgreSQL en nuestra maquina.

En otra entrada de este blog explicare los cambios mas importantes que podemos hacer en algunos de estos ficheros.

Veremos que hay algunas opciones que podremos cambiar on-the-fly con simples sentencias SQL, y veremos que hay otras configuraciones que requieren que le enviemos una señal SIGHUP al servidor. Las opciones que requieren que reiniciemos el sistema las vamos a establecer en el fichero $PGDATA/postgresql.conf, siendo $PGDATA la ruta al directorio donde se almacena la info de la base de datos.

Cambios dinámicos - pg_settings

Mediante la vista pg_settings, tenemos acceso a varios parámetros de configuración interesantes de PostgreSQL, algunos de ellos podremos incluso cambiarlos on-the-fly con el server corriendo.

La vista pg_settings se compone de dos campos, name y settings. El primero es el nombre del parámetro, mietras el segundo es el valor que va a tener el parámetro.

select * from pg_settings;

Para una explicacion detallada de todas las opciones cambiables dinámicamente y lo que hace cada una, lo mejor es echarle un ojo a la documentacion del administrador de bases de datos PostgreSQL, en el apartado http://www.postgresql.org/docs/7.3/static/runtime.html Server Run-time Environment. Tambien pueden ver esta entrada donde se explican los mas comunes:


http://postgresqlnovatos.blogspot.com/2008/02/configuracion-postgres-parametros.html

Esto es aplicable para casi todos los parámetros de configuración, lo que nos permite cambiar al momento determinados parámetros dependiendo del uso que el PostgreSQL esté haciendo del servidor.
De todas formas, veremos ahora que hay parametros como max_connections, que no permiten cambios con el servidor corriendo.


Cambios estáticos - postgresql.conf y parámetros de postmaster

postgresql.conf

En algunos casos, los parámetros de configuración del PostgreSQL no pueden cambiarse haciendo un update en la vista pg_settings, si no que hemos de cambiarlo en el fichero postgresql.conf, y lanzarle un SIGHUP al servidor, para reiniciarlo y que releea los ficheros de configuración.
El fichero postgresql.conf tiene un formato sencillo, de la forma:

nombre = valor

Siguiendo el mismo estilo que en la vista pg_settings. El archivo es como cualquier fichero de configuracion de unix, o shell script, de forma que todo lo que aparezca en una linea a partir del caracter # es considerado un comentario.
Un ejemplo de valor que debemos de establecer en el fichero postgresql.conf es el max_connections, que tiene un valor por defecto de 32 conexiones:

max_connections = 32

Podriamos cambiarlo facilmente al numero que quisieramos (Con algunas limitaciones como veremos más adelante):

max_connections = 1024

Una vez cambiado el parámetro, tendríamos que enviarle un SIGHUP al server, o sea podriamos hacer en una consola de linux:

services postgresql restart



No hay comentarios: