> On 16/02/2019, at 3:05 PM, Carlos T. Groero Carmona <cton...@gmail.com> wrote: > > Horacio, hay algo con lo que pueda ayudar para seguir mas de serca el > comportamiento de esta situacion especificamente en mi base de datos?
Si realmente quieres saber que esta pasando, vas a tener que usar pgreply en tu ambiente de pruebas e investigar que esta ocurriendo. Mis comentarios entre lineas. > > Aprovecho para comentarle que hoy tuve que detener nuevamente mi autovacuum > deamon, al rededor de las 8 empezaron a ver ciertos picos en New Relic en el > tiempo de respuesta del sistema, alrededor de las 9am fue constante y el > sistema no se recuperaba asi que tuve que deter el autovacuum por unas 4 > horas y despues lo volvi a poner, paso lo mismo el sabado pasado. Puede que tengas que ajustar algunos parametros del autovacuum solamente, lee sobre los parametros y cambia la frecuencia de vacuum ( o pega los settings que tienes sobre autovacuum. ). > > Adjunto algunas imagenes de NewRelic y el resultado de sar en ese horario... > CPU %user %nice %system %iowait > %steal %idle > 08:20:01 AM all 55.99 0.00 24.23 2.63 0.00 > 17.15 > 08:30:01 AM all 54.52 0.00 23.45 3.03 0.00 > 19.00 > 08:40:01 AM all 53.41 0.00 23.18 2.91 0.00 > 20.51 > 08:50:01 AM all 49.47 0.00 22.11 3.28 0.00 > 25.14 > 09:00:01 AM all 51.37 0.00 23.93 2.76 0.00 > 21.93 > 09:10:01 AM all 54.62 0.00 23.47 3.11 0.00 > 18.80 > 09:20:01 AM all 59.90 0.00 24.90 2.22 0.00 > 12.98 > 09:30:01 AM all 56.02 0.00 24.09 2.87 0.00 > 17.02 > 09:40:01 AM all 51.98 0.00 22.74 3.22 0.00 > 22.06 > 09:50:01 AM all 46.69 0.00 20.66 3.03 0.00 > 29.62 > 10:00:01 AM all 46.02 0.00 20.51 2.79 0.00 > 30.69 Esto es cada 10 min ( es un promedio ) si quieres saber que pasa en cada minuto modifica el sar la frecuencia de snapshoots. > Sobre el vacuumdb -F -a le comento que antes de ejecutarlo modifique > pg_database para que template0 aceptara coneciones que se realizo el vacuum > en todas las base de datos incluyendo template0. > > en el entorno de pre-produccion no fui tan agresivo, solo me conecte a > template0 y realice un vacuum freeze analyze verbose; y se realizo > satisfacotoriamente, no puso el XID en cero, pero si lo llevo a un valor casi > cero. > > Asi es como tengo pensado ejecutarlo en produccion porque la base de datos es > de 2TB y he autovacuum no ha podido realizar su trabajo correctamente por lo > que hay mucho trabajo que realizar ahi por vacuum asi que solo voy a realizar > vacuum freeze analyze verborse; en todas las base de datos menos en la de > produccion. > > El XID de mi base de datos principal crece cada 30min aproximadamente en > 1.7millones, tengo un cron job ejecutando la consulta y guardandolo en un > log. El crecimiento diario de mi base de datos es de aproximadamente 5GB > diarios, aunque al final del mes eliminamos las tablas particionadas por > meses que han estado salvadas por mas de 13 meses, recuperando alrededor de > 40GB, entonces mi base de datos crece aproximadamente en 110GB al mes, > ah...solo manejamos texto. > > Actualmente solo uso pgBadger para analyzar los logs y me encuentro en la > face inicial de instalar los plugings de NewRelic para monitoriar las base de > datos, aunque eso sera un procesolargo, ues primero sera probado en 3 o 4 > servidores diferentes antes de llegar a produccion. > > > Digame si hay algo mas que quiera saber o quiera probar para llegar a un > entorno mas sercano sobre lo que esta sucediendo Mirando el gráfico de respuestas miraría dos cosas. 1.0 capturar las consultas que se demoran más de 1 segundo. 2.0 Generar un P2 a los desarrolladores para que paren lo que están haciendo y hagan que el código funciones con un pool de conecciones. Al crear una nueva conexion lo que haces es generar un nuevo contexto, en Linux esto se evita a toda costa sobre todo en sistemas de alto trafico. Ahora esta es la lógica en bases de datos. los indices te ayudar a evitar full scan, pero el uso de indices usa más CPU, revisa cual es tu contención CPU o disco ? PS: Algo que reviso siempre ( dmesg ) mensajes del kernel, algunas veces el Linux esta pidiendo ayuda /var/log/messages pero esta ayuda se puede detectar con dmesg también. Ps2: Trafico de red, si tienes mucho trafico en la red, revisa si tienes el DMI de la tarjeta de red ( el driver ) bien configurado, si los mtu son 1500 o jumbo frames (9000) y sobre todo es un gran no no, si tienes los servidores trabajando a 10Gb y firewall entre medio a 1Gb links ( esto es un problema con Linux 6 y 7 para payloads sobre 2.4MB ). Más allá de revisar otros puntos creo que aquí esta tu 80/20 ( revisar que punto es el que te esta generando el 80 % de los problemas para atacarlo ). > On Fri, Feb 15, 2019 at 4:12 PM Alvaro Herrera <alvhe...@alvh.no-ip.org > <mailto:alvhe...@alvh.no-ip.org>> wrote: > On 2019-Feb-16, Horacio Miranda wrote: > > > Creo que es cosa de ejecutar la consulta: > > SELECT > > datname, > > max(age(datfrozenxid)), > > round(max(age(datfrozenxid)) / 2100000000.0 * 100.0, 3) AS > > percentage_transaction_ids_used > > FROM pg_database > > -- where datallowconn = true > > group by datname > > order by 2 desc; > > > > y Luego el vacuumdb -F -a ( -F es freeze y -a en todas las bases de datos > > ), el template0 no debe liberarse y las demás en mi caso el valor no cambio > > ) solo cuando abro el template0 es que el numero se va a cero. > > No recomiendo esto en una instancia con 7 TB de datos en total. Es > mejor dejar que autovacuum haga su trabajo. > > -- > Álvaro Herrera Niebla, Chile > <Screen Shot 2019-02-15 at 9.30.36 AM.png>