Ayuda con tunning de base de datos/vacuum/wraparround

From: Brian Colman <brian(at)bricosolutions(dot)com>
To: pgsql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Ayuda con tunning de base de datos/vacuum/wraparround
Date: 2014-05-19 21:31:55
Message-ID: CAGd21djfK_ZmwsrWPUDr389bnkp8NJWXL44VynEL72VMbVyXow@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos. Ojala me puedan dar una mano, tengo el siguiente escenario,
tengo una base de datos altamente transaccional v. 9.3, la misma en hora
pico maneja aproximadamente 5000 (97% Inserts, 3% Updates) transacciones
por minuto en una tabla. Debido a la cantidad de registros, la misma esta
particionada por hora, llegando a tener 15 millones de registros por hora
(pico), el tamaño de la base de datos ronda los 1.4 Tb, La tabla padre
tiene 360 hijas (15 dias), pasado los 15 dias las particiones son dropeadas.
Corre sobre una maquina de 24 Cores y 64 Gigas de ram, SSD para el motor y
los archivos val WAL y 2 tablespaces (datos, indices) montados sobre un
storage high-end. El postresql.conf esta customizado para que utilize casi
el total de memoria disponible, logrando un 99% de hit cache. Abajo los
valores configurados.

- max_connections = 300
- shared_buffers = 15500MB
- work_mem = 256MB
- checkpoint_segments = 100
- constraint_exclusion = partition
- autovacuum = on
- autovacuum_max_workers = 100

El problema que estoy teniendo es que debido a la cantidad de transacciones
de escritura, se dispara el autovacuum para evitar el wraparround, y se
producen bloqueos que impiden el insert y el update, este bloqueo dura
aproximadamente 6 horas, aparentemente cuando se dispara el autovacuum para
la tabla principal. No encontre mucha doc sobre la configuración del
autovacuum, comenze a jugar con los valores "freeze" y los del autovacuum,
logre que el autovacuum no se dispare y no hayan bloqueos. El autovacuum
"analize" se ejecutaba normalmente. Sin embargo despues de aprox 5 dias el
motor comenzo a dar warmings que se debia hacer un database-wide vacuum en
modo standalone para evitar el wraparround y la perdida de datos.
La pregunta es, habría alguna forma de calcular la correcta configuración
para el autovacuum para evitar los bloqueos y el wraparround o le estoy
exiguiendo demasiadas transacciones al motor?. Ojala puedan arrojar un poco
de luz al problema. Me amenzan a pasar a Oracle :'(. Gracias!!!

vacuum_freeze_min_age = 50000
vacuum_freeze_table_age = 2000000000
vacuum_multixact_freeze_min_age = 50000
vacuum_multixact_freeze_table_age = 2000000000
autovacuum_naptime = 15s
autovacuum_vacuum_threshold = 2000000
autovacuum_analyze_threshold = 100000
autovacuum_freeze_max_age = 2000000000
autovacuum_multixact_freeze_max_age = 2000000000
vacuum_cost_delay = 100
vacuum_cost_page_hit = 100
vacuum_cost_page_miss = 100
vacuum_cost_page_dirty = 50
vacuum_cost_limit = 200

--
Brian Colman Miers
brian(at)bricosolutions(dot)com

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2014-05-19 22:11:56 Re: Ayuda con tunning de base de datos/vacuum/wraparround
Previous Message Martín Marqués 2014-05-17 17:27:23 Re: Sobre repmgr