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 br...@bricosolutions.com