[firebase-br] Processo rodando procedures/triggers fica lento depois de se executado mais de 1 vez
Eurides Baptistella
eurides.baptistella em gmail.com
Sex Ago 19 13:06:15 -03 2011
Amigos, obrigado pelas respostas ... seguem meu relatos...
Respondendo as duas perguntas:
1 - A linguagem de programação é Delphi 2007 usando InterXpress for Firebird
como driver de conexão, mas esse não é o problema pois a chamada é em uma
Procedure que é executada somente uma vez pelo Delphi. Outro ponto que
isenta a aplicação é o fato de que a execução direta da Procedure já causa
lentidão, é ela que executa vários updates, deletes seletc ....etc ...
A aplicação está descartada acredito eu .....
2 - Foi identificado que existe uma lentidão "descomunal" em um simples
Update que é disparado por uma trigger de outra tabela, claro que pode não
ser o único problema mas ao menos quando removido o comando de update da
trigger o tempo da execução reduz consideravelmente, o que pressupõe que o
problema seja de fato o Update (ou o fato de disparar a trigger diversas
vezes em cascata executando o delete/update embora os comandos sejam simples
"delete from tabela where cod=OLD.COD" por exemplo).
Todos os comandos utilizam índices de forma correta e eficiente e o update
não é feito nos campos de índices da tabela.
O GC está desativado e é executado todos os dias as 2h da madrugada
juntamente com processos de backup/restore.
Quanto ao Forced Writes, utilizo ele ligado, ou seja, enviando imediatamente
para o disco, acho um risco desnecessário se pensarmos em hardwares de
qualidade. Mas essa sua dica me chamou a atenção, pois nessa transação tenho
mais de 20 mil registros afetados e irei realizar um teste desligando o
Forced Writes.
Para complementar as informações, vou rabiscar um exemplo de como é a
cascata que tenho....
1. APLICAÇÃO DELPHI
2. EXECUTA PROCEDURE
1. SELECIONA VÁRIOS REGISTROS
2. EXECUTA VÁRIAS OUTRAS OPERAÇÕES..........
3. EXECUTA DELETE TABELA1
1. Executa trigger no before delete
1. A Trigger faz uma subtração do (valor a ser excluído - valor
atual), realizar o update do novo valor na TABELA5
4. EXECUTA DELETE TABELA2
1. Executa trigger no before delete
1. A Trigger faz uma subtração do (valor a ser excluído - valor
atual), realizar o update do novo valor na TABELA6
5. EXECUTA DELETE TABELA3
1. Executa trigger no before delete
1. A Trigger faz uma subtração do (valor a ser excluído - valor
atual), realizar o update do novo valor na TABELA7
6. EXECUTA VÁRIAS OUTRAS OPERAÇÕES
Se for necessário posso tentar encaminhar os trechos de códigos para que vcs
possam analisar.
Novamente agradeço a atenção de todos .... aguardo por novas sugestões.
att.
--
Eurides V. Baptistella
E-mail: eurides.baptistella[@]gmail.com
Fone: +55 (49) 9125-6572
Mais detalhes sobre a lista de discussão lista