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

Valdemir (gmail) valdemirjs em gmail.com
Qua Dez 5 20:21:19 -03 2012


Cantu boa noite

Rapaz atualizei para a versão 2.1.5 e tive resultados semelhantes a você
teimando voltei pra versão anterior e novamente resultados semelhantes e 
sinceramente deve ter sido uma "puta escorregada minha"

não somente minha porque chamei um amigo para olhar comigo, foi ai que 
depois de procurar por informações no google, que enviei a msg na lista



-----Mensagem Original----- 
From: Carlos H. Cantu
Sent: Tuesday, December 4, 2012 3:15 PM
To: FireBase
Subject: Re: [firebase-br]Performance Inclusão Massa x Trigger x Tabelas

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


______________________________________________
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