[firebase-br] Performance Inclusão Massa x Trigger x Tabelas
Valdemir (gmail)
valdemirjs em gmail.com
Ter Dez 4 14:43:19 -03 2012
Boa tarde carlos, demorei a responder pq estava com um problema aqui, e tive
que resolve-lo
Preparei um banco de dados para ilustrar o que eu quiz dizer, talves não
tenha sido claro.
No link
http://www.4shared.com/rar/yopHWFpo/banco.html
ou
http://sharex.xpg.com.br/files/3879733901/banco.rar.html
tem o banco de dados com select na trigger e sem select na trigger, e também
tem o script, para inclusão dos registros no banco de dados
o teste que eu fiz foi usando o firebird 2.1 e IBExpert
note que no banco de dados, a trigger existe apenas para dar um select na
tabela historico caixa, note que eu usei no where do select o campo que é a
pk da tabela, e que na primeira linha da trigger tem a condição if 1=1 then
exit. justamente para não executar o codigo da trigger
O tempo para executar a inclusão no banco sem a trigger
7 s 688 para incluir
e no banco com a trigger
15s 593 ms
note que o tempo aumenta, só por causa da trigger que da select na tabela
historico caixa, na verdade a trigger existe, na primeira linha da trigger
já dou um exit, ou seja o select mesmo usando a PK nunca é executado
-----Mensagem Original-----
From: Carlos H. Cantu
Sent: Friday, November 30, 2012 4:48 PM
To: FireBase
Subject: Re: [firebase-br]Performance Inclusão Massa x Trigger x Tabelas
Vg> Mas pelo que eu vi, o firebird, verifica que na trigger carrega
informação
Vg> da tabela clientes, e ai acho que faz algum processo para deixar mas
rapido
Vg> a trigger se ele passar pelo codigo.
Não existe isso. O código do seu exemplo é executado muito rapidamente
se o campo ID estiver indexado na tabela de clientes. Você
dificilmente notará qualquer diferença de performance com o uso
"normal" do sistema.
Além disso, com o decorrer do uso do banco de dados, tanto o cache do
firebird como o cache do sistema operacional vai sendo preenchido,
deixando as consultas ainda mais rápidas pois não há leitura no HD.
[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br
Vg> Gladiston
Vg> Eu sempre nunca entendi bem mesmo como que os "caras do SQL", fazem
magica,
Vg> de deixar uma aplicação com um unico arquivo enorme, ficar mais rapida
do
Vg> que em arquivos pequenos separados por tabelas, sou da epoca do clipper
e
Vg> DBF.
Vg> Acredito que o firebird, deve fazer algum cache, quando uma trigger usa
mais
Vg> de uma tabela, eu na minha ignorancia, pensava que o fato de proteger um
Vg> codigo em uma trigger não causaria lendição.. Ex
Vg> Supondo que seja necessario ferificar se o cliente tem saldo disponivel
Vg> quando ele faz uma compra a prazo, para isso deve-se fazer uma consulta
na
Vg> tabela de clientes pelo campo LimiteDisponivel
Vg> na trigger before insert da tabela de vendas pensaria em fazer o
seguinte
If valorPrazo >> 0
Vg> Select limitedisponivel from clientes where id = :parid into limite
Vg> if ValorPrazo > limite
Vg> Expception 'limite indisponivel'
Vg> End
Vg> End
Vg> O codigo acima foi apenas para estudo provavelmente tem falhas ao
compilar a
Vg> trigger, mas enfim usando a logia acima, ele irá consultar a tabela de
Vg> clientes apenas se o valorprazo > 0, ou seja na minha ignorancia de
Vg> desenvolvedor, se o valor sempre for a vista, ele nunca passara pelo
codigo,
Vg> e teoricamente ele não vai causar queda de performance a não ser se a
venda
Vg> seja a prazo.
Vg> Mas pelo que eu vi, o firebird, verifica que na trigger carrega
informação
Vg> da tabela clientes, e ai acho que faz algum processo para deixar mas
rapido
Vg> a trigger se ele passar pelo codigo.
Vg> Este processo na vesão 2.5 será que esta mais inteligente ? , tipo ele
Vg> verifica que o valor prazo não é maior que zero e ai nem perde tempo
Vg> verificando o resto nem carregando em cache informações da tabela
cliente ?
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista