[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