[firebase-br] OAT Travada
Carlos H. Cantu
listas em warmboot.com.br
Seg Abr 7 17:42:50 -03 2014
Sugiro que vc faça alguns testes:
1) Atualize para o FB 2.5.2
2) A ODS dessa base é 11.1, ou seja, ela foi criada com o FB 2.1. Faça
um backup/restore pra atualizar pra 11.2
3) Tenha certeza que está rodando essas consultas nas tabelas de
monitoramento acessando a base como SYSDBA
4) Compare os PIDs observados nas tabelas de monitoramento com os
processos do Firebird em execução no SO. Pode ser que haja um processo
pendurado que está segurando a OAT e não está respondendo as ASTs.
5) Ao invés de usar o gstat pra pegar o numero das transações, faça a
consulta em mon$database usando a mesma transação que vc fez a
consulta na mon$transactions.
PS: Dicas de Vlad Khorsun.
[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br
RGdS> Cantu,
RGdS> Também achava isto, só que não é o que acontece... embaixo uma
RGdS> parte das estatísticas do banco e uma parte do mon$transaction ordenado por id
RGdS> Database header page information:
RGdS>
RGdS> Flags 0
RGdS> Checksum 12345
RGdS> Generation 660465595
RGdS> Page size 8192
RGdS> ODS version 11.1
RGdS> Oldest transaction 620866911
RGdS> Oldest active 620866912
RGdS> Oldest snapshot 620866912
RGdS> Next transaction 659308127
RGdS>
RGdS>
RGdS> select mon$transaction_id TRANS_ID, mon$attachment_id AT_ID, mon$timestamp,
RGdS> mon$top_transaction TOP_TRANS, mon$oldest_transaction OLDEST_TRANS,
RGdS> mon$oldest_active OLDEST_ACTIVE, mon$isolation_mode from mon$transactions
RGdS> order by mon$transaction_id
RGdS> TRANS_ID AT_ID MON$TIMESTAMP TOP_TRANS
RGdS> OLDEST_TRANS OLDEST_ACTIVE MON$ISOLATION_MODE
RGdS> 654252405 1150537 7/4/2014 08:08:55 654252405
RGdS> 620866911 620866912 2
RGdS> 654253780 1150561 7/4/2014 08:10:49 654253780
RGdS> 620866911 620866912 2
RGdS> 654253855 1150559 7/4/2014 08:10:55 654253855
RGdS> 620866911 620866912 2
RGdS> ...
RGdS> 659519666 1151330 7/4/2014 16:42:15 659519666
RGdS> 620866911 620866912 2
RGdS> 659519668 1155304 7/4/2014 16:42:15 659519668
RGdS> 620866911 620866912 2
RGdS> Como da pra ver a transação mais antiga da tabela é de hoje com
RGdS> id de 650 milhoes, só que o OAT ta em 620 milhoes. A dias já ta
RGdS> assim, então ja teve outras transações aonde o engine deveria
RGdS> ter atualizado o OAT no header. Ele só volta a atualizar se reiniciar o serviço do banco.
RGdS> Em 7 de abril de 2014 11:04, Carlos H. Cantu
RGdS> <listas em warmboot.com.br> escreveu:
RGdS>
RGdS> A única situação onde vc poderia ter uma OAT que não aparece na tabela
RGdS> mon$transaction, é quando a transação (considerada como a OAT) já foi
RGdS> commitada, mas depois disso nenhuma outra transação foi iniciada.
RGdS>
RGdS> Isso porque o número da OAT no header só é atualizado quando uma nova
RGdS> transação é iniciada.
RGdS>
RGdS> PS: Lembre-se que consultas em tabelas de monitoramento são snapshots
RGdS> do estado da base de dados no momento em que ela foi executada, e não
RGdS> mudam mais enquanto a transação associada a consulta não for encerrada.
RGdS>
RGdS> []s
RGdS> Carlos H. Cantu
RGdS> www.FireBase.com.br - www.firebirdnews.org
RGdS> www.warmboot.com.br - blog.firebase.com.br
RGdS>
RGdS>> Bom dia...
RGdS>
RGdS>> Alguém sabe de algum motivo no qual posso ter uma OAT travada no banco de
RGdS>> dados?
RGdS>
RGdS>> A situação que estou tento é o seguinte... em um certo cliente que tem um
RGdS>> uso grande do banco de dados esta acontecendo frequentemente alguma
RGdS>> situação em que a OAT fica travada, consequentemente a OIT tb gerando gap
RGdS>> de milhões de garbage em relação a next transaction. Isto poderia ser uma
RGdS>> causa simples, de ser algum programa com transação aberta a dias, mas se
RGdS>> olho pelas tabelas de monitoramento, mais especificamente pela
RGdS>> mon$transactions, não encontro a transação referenciada pela OAT, e
RGdS>> ordenado por transaction_id a mais antiga é uma do próprio dia, como seria
RGdS>> o para um uso correto do banco de dados.
RGdS>
RGdS>> A unica maneira que tenho resolver isto é reiniciando o firebird aonde ele
RGdS>> atualiza o OAT normalmente bastando um sweep pra tirar o GAP da OIT, porem
RGdS>> não é um procedimento que esta sendo visto com bons olhos pelo
RGdS>> administrador da rede.
RGdS>
RGdS>> Existe alguma forma de achar oq gerou esta OAT presa, ou fazer o servidor
RGdS>> limpar ela sem precisar reiniciar ele por completo?
RGdS>
Mais detalhes sobre a lista de discussão lista