Afinamiento de La Base de Datos PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

Afinamiento de la base de

datos

por Jaime Casanova


PostgreSQL

Consideraciones sobre el sistema de discos.

Configuraciones de Postgresql.conf relevantes al


rendimiento.

Controlando el uso de recursos

Mitigando el costo de escritura a disco.

Indicando a Postgres como escoger los mejores


planes.
PostgreSQL

Consideraciones sobre el Sistema de Discos

El sistema de discos es uno de los cuellos de botella mas


comunes en un sistema de base de datos.

Aunque aumentar la memoria puede mejorar la


situacin para bases de datos pequeas, no siempre
es la solucin.
PostgreSQL

Consideraciones sobre el Sistema de Discos


Configuracin RAID

En la comunidad se ha recomendado el nivel 10


PostgreSQL

Consideraciones sobre el Sistema de Discos


Configuracin RAID

En la comunidad se ha recomendado el nivel 10

Apagar cache de escritura o usar battery backed array


controllers
PostgreSQL

Consideraciones sobre el Sistema de Discos


Configuracin RAID

En la comunidad se ha recomendado el nivel 10

Apagar cache de escritura o usar battery backed array


controllers

Distribucin de los discos


PostgreSQL

Consideraciones sobre el Sistema de Discos


Configuracin RAID

En la comunidad se ha recomendado el nivel 10

Apagar cache de escritura o usar battery backed array


controllers

Distribucin de los discos

Poner el WAL ($PGDATADIR/pg_xlog) en un disco


aparte
PostgreSQL

Consideraciones sobre el Sistema de Discos


Configuracin RAID

En la comunidad se ha recomendado el nivel 10

Apagar cache de escritura o usar battery backed array


controllers

Distribucin de los discos

Poner el WAL ($PGDATADIR/pg_xlog) en un disco


aparte

Si es posible; disponer de discos separados para


poner los datos, ndices y archivos temporales.
PostgreSQL

postgresql.conf: Parmetros relevantes al rendimiento

Controlando el uso de recursos

max_connections

shared_buffers

work_mem

max_fsm_pages, max_fsm_relations
PostgreSQL

postgresql.conf: max_connections

Mximo nmero de conexiones permitidas a la base de


datos.

Debe mantenerse en un valor razonable.

Al escoger el valor de max_connections se debe


considerar el uso de work_mem.

Se puede usar algn pool de conexiones (PgPool,


PgBouncer) para mantener este valor bajo.
PostgreSQL

postgresql.conf: shared_buffers

Este parmetro determina cuanta memoria puede usar


PostgreSQL de forma dedicada para mantener datos en
cache.

Un valor razonable (para empezar a probar) es el 25% del


total de la memoria RAM disponible.
PostgreSQL

postgresql.conf: shared_buffers

Si no se indica la unidad se asume 8Kb por cada shared


buffer.

shared_buffers = 1024 (8Mb)

Puede necesitarse alterar el valor de SHMMAX.


PostgreSQL

postgresql.conf: work_mem

Este parmetro determina cuanta memoria puede usar


PostgreSQL en operaciones de ordenamiento y para
tablas hash antes de usar archivos temporales.

Este valor se aplica por operacin (una consulta


realizando varios ordenamientos usar X veces este
valor).
PostgreSQL

postgresql.conf: work_mem

Al escoger el valor de work_mem se debe considerar el


valor de max_connections, un valor razonable puede ser
entre el 2-4% del total de la memoria.

Para mitigar el costo de usar archivos temporales se


puede usar el parmetro temp_tablespaces
PostgreSQL

postgresql.conf: max_fsm_pages y max_fsm_relations

Guardan informacin sobre el espacio libre (reutilizable)


generado debido a la existencia de tuplas muertas en la
base de datos.

El FSM solo se registra durante vacuum.


PostgreSQL

postgresql.conf: max_fsm_pages y max_fsm_relations

max_fsm_relations debera ser igual al total de tablas e


ndices en todas las bases de datos de una instalacin.

Se puede usar vacuum verbose para determinar el valor


de max_fsm_pages.
PostgreSQL

postgresql.conf: Parmetros relevantes al rendimiento

Mitigando el costo de escritura a disco

fsync, synchronous_commit

commit_delay, commit_siblings

checkpoints

checkpoints_segments

checkpoints_timeout

checkpoints_completion_target
PostgreSQL

postgresql.conf: fsync, synchronous_commit

Determina si todas las pginas del WAL deben gabarse a


disco antes de que se considere terminada la transaccin.

Setear este valor a OFF podra causar corrupcin de


datos ante una eventual cada del servidor.

En instalaciones de Data Warehouse podra apagarse


para aumentar el rendimiento.
PostgreSQL

postgresql.conf: fsync, synchronous_commit

synchronous_commit puede proveer la mejora en el


rendimiento que fsync=off dara sin el riesgo de
corrupcin de datos.

Se puede setear en cualquier momento.


PostgreSQL

postgresql.conf: commit_delay, commit_siblings

Se usan para tratar de ejecutar COMMIT


simultaneamente en varias transacciones.

Si existen otros backends activos cuando una transaccin


est haciendo COMMIT, el servidor espera commit_delay
microsegundos con la esperanza de que alguna otra de
las transacciones (hasta commit_siblings) termine.
PostgreSQL

postgresql.conf: checkpoints

Pueden ocurrir en 2 circunstancias:

Se han llenado todos los segmentos del WAL


(checkpoint_segment)

Ha transcurrido chekpoint_timeout segundos desde el


ltimo checkpoint.

checkpoint_completion_target fue concebido para


distribuir uniformemente la ejecucin del checkpoint
actual durante el perodo de espera al siguiente.
PostgreSQL

postgresql.conf: escogiendo los mejores planes

vacuum_cost_delay

random_page_cost

effective_cache_size

constraint_exclusion
PostgreSQL

postgresql.conf: vacuum_cost_delay

Determina el tiempo que vacuum dormir luego de haber


trabajado por un cierto periodo.

Hacer uso de este parmetro puede evitar que un


vacuum consuma demasiados recursos procesando
una tabla muy grande y/o con alta concurrencia.
PostgreSQL

postgresql.conf: random_page_cost

Determina la forma en que el planeador considera los


accesos no secuenciales a disco.

Un valor bajo favorecer el uso de ndices; un valor


alto, las lecturas secuenciales.

Aunque es prudente reducir un poco este valor, debe


recordarse que el uso de ndices tiene un costo y nunca
ser ms rpido que el acceso secuencial
(seq_page_cost).
PostgreSQL

postgresql.conf: effective_cache_size

Determina la estimacin del planeador en cuanto a cuanta


memoria hay disponible para mantener un cache para las
consultas.

Un valor alto favorecer el uso de ndices; un valor


bajo, las lecturas secuenciales.
PostgreSQL

postgresql.conf: effective_cache_size

Se debera configurar al valor de la memoria que queda


luego de considerar shared_buffers, Sistema Operativo y
otras aplicaciones.

Un valor razonable, dependiendo de la instalacin, puede


ser de 1/2 del total de la memoria.
PostgreSQL

postgresql.conf: constraint_exclusion

Permite al planeador considerar los constraints checks en


la tabla al determinar el plan de ejecucin.

Se usa cuando se esta usando un esquema de


particin basado en herencia de tablas.
PostgreSQL

postgresql.conf: constraint_exclusion

En el siguente ejemplo solo se accesar a la tabla


child2000.

CREATE TABLE parent(key integer, ...);


CREATE TABLE child1000(
check (key between 1000 and 1999)
) INHERITS(parent);
CREATE TABLE child2000(
check (key between 2000 and 2999)
) INHERITS(parent);
...
SELECT * FROM parent WHERE key = 2400;

También podría gustarte