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