Hola lista, solo quiero darles un update de lo que hice para resolver este
asunto y que funciono, espero que nadie pase por mi amarga experiencia pero
por si les pasa tengan una posible salida.

Casualmente tenia unos servidores disponibles los cuales ivamos a utilizar
hace algun tiempo, pero se habia cancelado por migrar hacia Azure.

Lo que hice fue replicar (SR) desde mi DR a uno de estos servidores, y una
vez todo listo y coordinado pues lo promovi a master y actualize a postgres
9.6, si debo decir que me tomo mas de lo planeado para estar online otra
vez, pues el analyze tomo horas y horas sin resultados, le hice analyze a
una BD de menos de 10MB y nunca termino, al final despues de varios dias
sin efecto lo cancele con -9 porque no se queria detener, pues ya
autovacuum habia limpiado todo el cluster para evitar el wraparround.

Con eso se resolvio el problema de la tabla correucta (pg_daatabase).

De paso aproveche y puse un F5 como LB y dos pgbouncer como en algun
momento me aconsejaron (utilizar connection pooling) y es increible como
esas herramientas estan ayudando cuando tenemos picos en la carga del
sistema.

Una vez mas gracias or sus consejos.
Carlos

On Tue, Apr 30, 2019 at 12:59 PM Carlos T. Groero Carmona <cton...@gmail.com>
wrote:

> Ante todo gracias por sus comentarios,
>
> Alvaro, desde que puse un pie en esta compania he empujado para migrar a
> una version superior soportada, pero nunca lo han aprobado, espero que esta
> amarga sitacion los haga escarmentar y aprueben la migracion que tanto he
> pedido.
>
> Pero bueno mi trabajo ahora es tratar de buscar una solucion y evitar como
> DBA que mi servidor caiga y aprecio mushisimo los consejos e ideas que
> todos me brindan.
> A continuacion algunos datos:
>
> postgres=# select distinct relname, relfrozenxid from pg_class where
> relname = 'pg_database';
>
>    relname   | relfrozenxid
>
> -------------+--------------
>
>  pg_database |    935164618
>
> (1 row)
>
>
> postgres=# vacuum ANALYZE pg_database;
>
> ERROR:  found xmin 1983484116 from before relfrozenxid 4007722125
>
> postgres=# SELECT
>
> datname,
>
> max(age(datfrozenxid)),
>
> round(max(age(datfrozenxid)) / 2100000000.0 * 100.0, 3) AS
> percentage_transaction_ids_used
>
> FROM pg_database
>
> group by datname
>
> order by 2 desc limit 1;
>
>  datname |    max     | percentage_transaction_ids_used
>
> ---------+------------+---------------------------------
>
>  auth_db | 1114181073 |                          53.056
>
> (1 row)
>
> En estos momentos mi avg XID (diario) es ~30Millions por lo que me da unos
> 25 dias antes que el servidor se apague para evitar wraparrounds.
>
> Mi tabla affectada es pg_database asi que:
>
> postgres=# select ctid, xmin, datname, datfrozenxid, datminmxid from
> pg_database;
>
>   ctid  |    xmin    |     datname      | datfrozenxid | datminmxid
>
> --------+------------+------------------+--------------+------------
>
>  (0,1)  |          2 | ofx_production   |    935164548 |          2
>
>  (0,2)  |          2 | auth_db          |    935163740 |          2
>
>  (0,3)  |          2 | postgres         |    935164618 |          2
>
>  (0,4)  |          2 | semi_temp        |    944965842 |          2
>
>  (0,6)  |          2 | sami_production  |    935327190 |          2
>
>  (0,7)  |          2 | locations        |    935164198 |          2
>
>  (0,8)  |          2 | locations_backup |    935164338 |          2
>
>  (0,9)  |          2 | template1        |    944966462 |          2
>
>  (0,11) | 1983484116 | template0        |    944966014 |          2
>
> (9 rows)
>
> La tupla que esta corructa es template0, creo que todo empezo cuando tuve
> que actualizar el datallowconn en templace 0 para poder ejecutar vacuum
> en esa base de datos y una vez terminaba el vacuum pues la actualizava de
> nuevo, en fin, no estoy seguro, tengo el mismo cron job corriendo en otros
> servidores para hacerle vacuum a todas las DB en el servidor y no tengo
> este problema.
>
> Alvaro, me sugieres hacer un update en la tabla pg_database lo que no me
> queda claro si  set xmin = 2 or set xmin=935164618
>
> Una pregunta, suponiendo que esto no funcione, migrar a una version
> superior soportada podria ayudarme a resolver este problema?
>
> Gracias,
> Carlos
>
> On Mon, Apr 29, 2019 at 11:40 AM Alvaro Herrera <alvhe...@2ndquadrant.com>
> wrote:
>
>> Carlos T. Groero Carmona escribió:
>>
>> > Entonces, algo que se pueda hacer para resolver esta situacion y poder
>> > ejecutar vacuum?
>>
>> creo que la alternativa era (después de tomar un respaldo, por si algo
>> se rompe) hacer un UPDATE del pg_class.relfrozenxid en las tablas
>> afectadas en la base de dato afectada -- volverlo atrás al valor del
>> xmin que te indica, y luego ejecutar vacuum sobre esa tabla en esa base
>> de datos.  Rezar para que nada se rompa.  No sé si es necesario repetir
>> en otras BDs.
>>
>> Creo que lo mejor sería detener toda actividad de la BD hasta que hayas
>> resuelto.
>>
>> Otra opción: tomar un pg_dump completo, borrar todo (initdb), restaurar
>> el dump.
>>
>> La próxima vez que te digan que tienes que actualizar a una BD
>> soportada, no esperar hasta que los bichos te piquen.  Ojalá tu
>> experiencia le sirviera de lección a todos los demás también.
>>
>> --
>> Álvaro Herrera                https://www.2ndQuadrant.com/
>> PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
>>
>

Reply via email to