martes, febrero 15, 2011

Como mejorar el performance de un motor de base de datos PostgreSQL en 15 minutos

A continuación describiré rápidamente como mejorar el desempeño de un motor PostgreSQL . 


  • Edite el archivo postgresql.com y modifique las siguientes variables :
max_connections : esta variable indica la cantidad de conexiones simultaneas a su base de datos , configurela de acuerdo a sus necesidades.

shared_buffersEl parámetro de configuración shared_buffers determina la cantidad de memoria dedicada al uso de datos en el motor PostgreSQL para el almacenamiento en caché. Este parámetro viene por defecto en un valor bajo debido a que en algunas plataformas requiere re-compilar el kernel. 
Si usted tiene un sistema con 1GB de RAM o más, un valor de partida razonable para shared_buffers es de 1 / 4 de la memoria en su sistema.

Si cambia esta opcion requiere que reincie el servicio postresql . 

 effective_cache_size:  Este parámetro establece una estimación de la cantidad de memoria disponible para almacenamiento en caché de disco del sistema operativo y en la propia base de datos, después de tomar en cuenta lo que es utilizado por el propio sistema operativo y otras aplicaciones. Esto sirve como guía para que usted como administrador de la base de datos sepa la cantidad de memoria disponible para el sistema operativo y el motor de la base de datos . Este valor solamente es utilizado por el planificador de consultas de PostgreSQL para saber si utiliza memoria RAM o no . 

Si cambia esta opcion no requiere reiniciar el servicio postgresql.

default_statistics_target: El motor base de datos recopila estadísticas sobre cada una de las tablas de la base de datos para decidir cómo ejecutar consultas sobre ellas. Por defecto, no recolecta demasiada información, y si no esta obteniendo buenos planes de ejecución particularmente en las más largas (o variadas) tablas debería incrementar default_statistics_target y luego correr ANALYZE la base de datos nuevamente (o esperar al autovacuum que lo haga por ud.). Mucha gente cree que el valor por defecto para default_statistics_target en hardware más moderno debe ser llevado a 100 (de su valor de 10), ya que hace menos probable que se ejecute un mal plan sólo en el coste de la actividad de algunos antecedentes.
Para que mejore el rendimiento en sus consultas deje esta variable en 100.

maintenance_work_mem: Si hace muchas ordenaciones complejas, y tiene bastante memoria, incrementando esta variable le permitirá a PostgreSQL a realizar ordenamientos más distendidos en memoria, obviamente incrementando la performance en comparación a las basadas en disco.
Este tamaño está aplicada a cada uno de los ordenamientos para cada usuario, y consultas complejas pueden utilizar múltiples buffers de memoria dedicados a estos. Debería considerar lo que tiene establecido en max_connections para establecer el work_mem apropiadamente. Este es un valor donde  si los usuarios ejecutan consultas extensas, podrían llegar a utilizar gigas en memoria.
No se recomienda dejar valores muy altos en kilobytes para este parámetro, ya que este parámetro se usa cuando se hace un vacuum y el SO debería asignar memoria reservada al vacuum cuando este entre en ejecución. 

wal_buffers : Luego de cada transacción, Postgresql fuerza a comprometer para aliviar la WAL. Esto puede hacerse en varias formas, y en algunas plataformas las otras opciones pueden ser consideradas más rápidas que la opción conservadora por defecto.
Incrementando los wal_buffers de su pequeño valor por defecto ( 8 kb) con un par de kilobytes, debería ayudar para sistemas con grandes inserciones. Las estadísticas indican que incrementando a 1MB es suficiente para sistemas grandes.

Cambiar este valor requiere reiniciar la base de datos.

max_prepared_transactions: Este valor es usado para manejar 2 phase commit (transacción a dos fases). Si Ud. no lo utiliza (y no sabe lo que es), puede llevar este valor a 0. Esto salvará un poco de memoria compartida. Para los sistemas de bases de datos con un alto numero (minimo 100) de conexiones concurrentes, tenga precaucion ya que este valor además afecta el número disponible de lugares para bloqueos en pg_locks, por lo que querrá dejar este en el valor por defecto.

El cambio de max_prepared_transactions requiere reiniciar el servidor.


Cambiando las variables anteriormente descritas usted podrá mejorar el funcionamiento de su motor de base de datos . 

Esta información fue extraída de la Wiki de PostgreSQL , en ella podrá profundizar mas sobre el tema .

No hay comentarios.: