Olá Amigos !

Aqui no trabalho temos uma aplicação feita em java que as vezes se torna
irresponsivo
sendo necessário reiniciar a aplicação. Algumas vezes apenas reiniciar
não basta, a aplicação
para em algum estágio da inicialização. Quando isso acontece eu verifico
no banco se existe
algum locks ou ainda alguma transação pendente com:

# select * from pg_prepared_xacts

Geralmente nada encontro, mas quando reinicio o servidor do postgresql a
aplicação java inicializa e volta funcionar normalmente.
Olhando os logs encontrei vários registros da seguinte ocorrencia:

......
removing corrupt two-phase state file "0035E001"
removing corrupt two-phase state file "0035DFFB"
removing corrupt two-phase state file "00363287"
removing corrupt two-phase state file "0035DFFF"
removing corrupt two-phase state file "00363218"
removing corrupt two-phase state file "0036DAD6"
removing corrupt two-phase state file "003632C6"
removing corrupt two-phase state file "0036324B"
removing corrupt two-phase state file "0035DFF4"
removing corrupt two-phase state file "003684A4"
removing corrupt two-phase state file "0035E075"
removing corrupt two-phase state file "0035DFE9"
removing corrupt two-phase state file "0035DFF8"
removing corrupt two-phase state file "0035E081"
removing corrupt two-phase state file "003632B1"
removing corrupt two-phase state file "003684E3"
removing corrupt two-phase state file "00336F63"
removing corrupt two-phase state file "003684DF"
......


Me falta conhecimento para interpretar isso, mas me parece algo
relacionado a commits não realizados,
infelizmente não consigo detecta-los em minhas buscas simples por locks
no banco. Pesquisei no google e
achei pouca referencia. Enfim, qualquer dica é bem vinda ! Muito grado
desde já !

Parece que você está usando prepared transactions, que são úteis para 2PC - Two Phase Commit. Alguns frameworks Java fazem isso mas é contornável em código e configurações.
Não vejo motivo pra usar isso num ambiente com único banco de dados.
Sua aplicação está deixando transações preparadas pra trás. Isso deixa vários locks que impedem novas transações de terminar.

Provável bug na sua aplicação, você terá que rever seu código e o(s) framework(s) et bibliotecas que está utilizando. Não use prepared transacions num ambiente com único banco de dados.

Quando reiniciou o PostgreSQL ele finalizou tudo, mas transações preparadas por algum motivo de corrupção que não temos como entender sem mais detalhes. Transações preparadas normalmente resistem ao reinício do PostgreSQL.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a