[firebase-br] Performance Inclusão Massa x Trigger x Tabelas

Carlos H. Cantu listas em warmboot.com.br
Ter Dez 4 15:15:00 -03 2012


O tempo aqui pra mim foi praticamente o mesmo em todas as situações: 4s

FB 2.1.4

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

Vg> Boa tarde carlos, demorei a responder pq estava com um problema aqui, e tive
Vg> que resolve-lo

Vg> Preparei um banco de dados para ilustrar o que eu quiz dizer, talves não
Vg> tenha sido claro.

Vg> No link
Vg> http://www.4shared.com/rar/yopHWFpo/banco.html
Vg> ou
Vg> http://sharex.xpg.com.br/files/3879733901/banco.rar.html

Vg> tem o banco de dados com select na trigger e sem select na trigger, e também
Vg> tem o script, para inclusão dos registros no banco de dados

Vg> o teste que eu fiz foi usando o firebird 2.1 e IBExpert
Vg> note que no banco de dados, a trigger existe apenas para dar um select na
Vg> tabela historico caixa, note que eu usei no where do select o campo que é a
Vg> pk da tabela, e que na primeira linha da trigger tem a condição if 1=1 then
Vg> exit. justamente para não executar o codigo da trigger

Vg> O tempo para executar a inclusão no banco sem a trigger
Vg> 7 s 688 para incluir

Vg> e no banco com a trigger
Vg> 15s 593 ms

Vg> note que o tempo aumenta, só por causa da trigger que da select na tabela
Vg> historico caixa, na verdade a trigger existe, na primeira linha da trigger
Vg> já dou um exit, ou seja o select mesmo usando a PK nunca é executado

Vg> -----Mensagem Original----- 
Vg> From: Carlos H. Cantu
Vg> Sent: Friday, November 30, 2012 4:48 PM
Vg> To: FireBase
Vg> 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 
Vg> informação
Vg>> da tabela clientes, e ai acho que faz algum processo para deixar mas 
Vg> rapido
Vg>> a trigger se ele passar pelo codigo.

Vg> Não existe isso. O código do seu exemplo é executado muito rapidamente
Vg> se o campo ID estiver indexado na tabela de clientes. Você
Vg> dificilmente notará qualquer diferença de performance com o uso
Vg> "normal" do sistema.

Vg> Além disso, com o decorrer do uso do banco de dados, tanto o cache do
Vg> firebird como o cache do sistema operacional vai sendo preenchido,
Vg> deixando as consultas ainda mais rápidas pois não há leitura no HD.

Vg> []s
Vg> Carlos H. Cantu
Vg> www.FireBase.com.br - www.firebirdnews.org
Vg> www.warmboot.com.br - blog.firebase.com.br

Vg>> Gladiston

Vg>> Eu sempre nunca entendi bem mesmo como que os "caras do SQL", fazem 
Vg> magica,
Vg>> de deixar uma aplicação com um unico arquivo enorme, ficar mais rapida 
Vg> do
Vg>> que em arquivos pequenos separados por tabelas, sou da epoca do clipper 
Vg> e
Vg>> DBF.

Vg>> Acredito que o firebird, deve fazer algum cache, quando uma trigger usa 
Vg> 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 
Vg> na
Vg>> tabela de clientes pelo campo LimiteDisponivel

Vg>> na trigger before insert da tabela de vendas pensaria em fazer o 
Vg> 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 
Vg> 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 
Vg> codigo,
Vg>> e teoricamente ele não vai causar queda de performance a não ser se a 
Vg> venda
Vg>> seja a prazo.

Vg>> Mas pelo que eu vi, o firebird, verifica que na trigger carrega 
Vg> informação
Vg>> da tabela clientes, e ai acho que faz algum processo para deixar mas 
Vg> 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 
Vg> cliente ?


Vg> ______________________________________________
Vg> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Vg> Para saber como gerenciar/excluir seu cadastro na lista, use: 
Vg> http://www.firebase.com.br/fb/artigo.php?id=1107
Vg> Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista