Problema de performace resolvido. Mas.....

Firebird

15/12/2003

Prezados colabores

Há quase dois mesms venho neste forum solcitar apoio para resolver um problema no meu sistema. O probelma era o seguinte: o sistema iniciava vendendo bem mais com o volume de vendas comecava a ficar lento até não poder mais. Ai era necessário reinicar a máquina para resolver o problema. Vcs me dera várias informaçoes sobre como resolver mas não tive exito. Resolvi então executar cada operação no sistema e na gravaçã encontrei o trecho que estava dando problema. Veja abaixo

Update Estoque SET Estoque.Ultima_Venda = :sData,
Estoque.Ultima_Movimento = :sData
Where Estoque.Codigo_Filial = :iFilial
And Exists (Select Orcamento_Tmp.Codigo_Produto From Orcamento_Tmp
Where Usuario = :sUsuario
And Estoque.Codigo_Produto = Orcamento_Tmp.Codigo_Produto
And Tipo_Item = ´V´);

Tirei esta instrução e pronto, resolveu. Tentei esta trigger tambem:

Set Term ^;
Create Trigger Atu_Data_Movimento_Venda For Venda_Itens Before Insert As
Begin
Update Estoque SET Estoque.Ultima_Venda = New.Data,
Estoque.Ultima_Movimento = New.Data
Where Estoque.Codigo_Filial = New.Codigo_Filial
And Estoque.Codigo_Produto = New.Codigo_Produto
And New.Tipo_Venda_Troca = ´V´;
End ^
Set Term ^ ;

Mas tambem tive o mesmo problema de lentidão. Isto é, o sistema comeca bem mais vai degradando a cada venda usando qualquer uma das instruções acima. Tenho um índice e retirando este indice a performance até melhora mais o probelma continua.

[b:f752414985]A minha pergunta é porque esta procedure ou trigger acima consome tanto recurso que o banco de dados fica lento e quando reinciado volta ao normal ? Usando o programa ibperformance verifiquei que com a procedure ou trigger acima o sistema começa a consumir memory buffer cache de forma abusurda. Como exemplo fazendo testes com mil vendas e com a procedure acima ele foi para 900.000.000 sem a procedure foi para 17.000.000. Usei diversas versões do firebird até a ultima 1.5. [/b:f752414985]

Assim embora resolvido não desejo que outros colabores passem pela mesma angustia que passei. Gostaria então de alguma opinão sobre o assunto.

Mais uma vez Grato
Marcos Roberto


Marcosrodias

Marcosrodias

Curtidas 0

Respostas

Agnaldo

Agnaldo

15/12/2003

Prezados colabores Há quase dois mesms venho neste forum solcitar apoio para resolver um problema no meu sistema. O probelma era o seguinte: o sistema iniciava vendendo bem mais com o volume de vendas comecava a ficar lento até não poder mais. Ai era necessário reinicar a máquina para resolver o problema. Vcs me dera várias informaçoes sobre como resolver mas não tive exito. Resolvi então executar cada operação no sistema e na gravaçã encontrei o trecho que estava dando problema. Veja abaixo Update Estoque SET Estoque.Ultima_Venda = :sData, Estoque.Ultima_Movimento = :sData Where Estoque.Codigo_Filial = :iFilial And Exists (Select Orcamento_Tmp.Codigo_Produto From Orcamento_Tmp Where Usuario = :sUsuario And Estoque.Codigo_Produto = Orcamento_Tmp.Codigo_Produto And Tipo_Item = ´V´); Tirei esta instrução e pronto, resolveu. Tentei esta trigger tambem: Set Term ^; Create Trigger Atu_Data_Movimento_Venda For Venda_Itens Before Insert As Begin Update Estoque SET Estoque.Ultima_Venda = New.Data, Estoque.Ultima_Movimento = New.Data Where Estoque.Codigo_Filial = New.Codigo_Filial And Estoque.Codigo_Produto = New.Codigo_Produto And New.Tipo_Venda_Troca = ´V´; End ^ Set Term ^ ; Mas tambem tive o mesmo problema de lentidão. Isto é, o sistema comeca bem mais vai degradando a cada venda usando qualquer uma das instruções acima. Tenho um índice e retirando este indice a performance até melhora mais o probelma continua. [b:456979509b]A minha pergunta é porque esta procedure ou trigger acima consome tanto recurso que o banco de dados fica lento e quando reinciado volta ao normal ? Usando o programa ibperformance verifiquei que com a procedure ou trigger acima o sistema começa a consumir memory buffer cache de forma abusurda. Como exemplo fazendo testes com mil vendas e com a procedure acima ele foi para 900.000.000 sem a procedure foi para 17.000.000. Usei diversas versões do firebird até a ultima 1.5. [/b:456979509b] Assim embora resolvido não desejo que outros colabores passem pela mesma angustia que passei. Gostaria então de alguma opinão sobre o assunto. Mais uma vez Grato Marcos Roberto



Olá Marcos.
Desenvolvo em Delphi com FB, e no inicio teive alguns problemas mas este ao qual vc se refere ainda não vi. Mas alguns detalhes:
Qual o SO vc está utilizando? se for o Win9x, este fica armazenando dados em seu ´cache´ e não limpa e fica armazenando... até travar. Para resolver este problema usei a seguinte tática:
Em meu cpmputador/propriedades/Desempenho/Sistema de arquivos:

Desativar novo compartilhamento de arquivo e bloqueio de
semântica.
Desativar ajustes de buffers síncronos.
Desativar o cache de gravação anterior para todas as unidades.
Isso faz com que o windows não utilize o cache para gravar dados.

Se for no Win2k/xp

Com o regedit
Localize a chave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters.

Adicione os dois valores do tipo DWORD
CachedOpenLimit
EnableOplocks
os dois com o valor 0

Seus problemas podem diminuir consideravelmente.

Um abraço.


GOSTEI 0
POSTAR