[firebase-br] RES: Sugestão para desempenho no Firebird

Eduardo Jedliczka - TeamFB jedyfb em gmail.com
Qui Abr 3 10:48:10 -03 2008


Já trabalhei BASTANTE com ZEOS, IBX, IBO, BDE e tive alguns contatos com
DBX.

o único componente que possui inteligência para "fechar" uma query não
utilizada é o IBO, mas isto depende de uma série de fatores (entre eles
se você permite ao IBO gerenciar automaticamente as transações ou se
você inicia manualmente as transações, ou cria uma transação única para
todo o seu aplicativo). Todos os demais (há excessões para a BDE) deixam
a transação aberta até que se realize um commit.

Zeos (tanto a versão 5 quanto 6) e IBX possuem falhas graves com o
CommitRetainning...

Você queria saber a diferença entre prepare e close ? vou te dar dois
exemplos:

1)Imagine que você queira inserir 100 clientes:
Se você prararar este comando
insert into cliente (campos) values (:campo1,:campo2,:campo3,...);
e só passar os parâmetros, haverá uma redução no tráfego de rede, e
principalmente um ganho enorme nos processos internos do banco para
"validar" o comando sql.
Aposto que devidamente preparado e recebendo parâmetros o tempo de
insert será entre 20% e 30% menores.

Agora imagine que você tem uma query complexa (joins, sum, union) que
traga poucos registros, pois é filtrada por clientes ou por cidade....

O tempo de prepare desta query será considerável (construir o plan,
validar a sintaxe, etc.), se você preparar ela e executar várias vezes
com parâmetros diferentes, o desempenho será muito melhor do que você
"executar várias queries diferentes". 

Sabendo disto, o close indica ao banco que você irá passar outros
parâmetros, mas que aproveite o sql já recebido e "preparado".

(só uma dica, a maioria dos componentes executam o umprepare num
sql.clear, ou sql.add e executam o prepare dentro do open)

porém o unprepare, avisa ao banco que aquela query não será mais usada e
permite ao banco "liberá-la" para receber uma outra query (como o FB
trabalha com reaproveitamenteo de memórioa, esta memória não é
liberada)!

há muito mais coisas a tratar e considerar, mas acho que já escrevi
muito desta vez.

Sucesso,

Eduardo Jedliczka

Em Qua, 2008-04-02 às 21:53 -0300, Magno System escreveu:
> Pelo que pude ver pelo FrmStatus mesmo fechando a query ela continua 
> preparada. Portanto vou fazer uma função que varra todos os componentes do 
> form, e o que for TIB_Query ou T_IBCursor eu dou um UNPREPARE. Aí ponho esta 
> função no evento ONCLOSE de cada form. Já na data module eu ponho um 
> unprepare no evento ONCLOSE de cada componente TIB_QUERY.
> 
> Agora 3 dúvidas:
> 
> 1 - Vivo escutando por aí que o melhor é despreparar a query quando a mesma 
> não for mais usada. Qual a diferença entre FECHAR UMA QUERY e DESPREPARAR 
> UMA QUERY ?
> 
> 2 - Eu uso o IBO 4.8.7. Esta versão já permite que o IBO faça o controle de 
> timer mesmo sem o IB_SESSION ?
> 
> 3 - Qual a diferença entre o TIB_Database e o TIB_Connection ?
> 
> EMPRESA: Marcelo Guimarães Nogueira
> NOME FANTASIA: Magno System
> ENDEREÇO: Rua Oliveira Leite, 66 - Centro - Passa Quatro - MG
> EMAIL: magno em speet.com.br
> CNPJ: 07.693.076/0001-99
> 
> Marcelo Guimarães Nogueira
> Magno System (Empresa Desenvolvedora de Software)
> ----- Original Message ----- 
> From: "Carlos H. Cantu (TeamFB)" <listas em warmboot.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, April 02, 2008 9:20 PM
> Subject: Re: [firebase-br]RES: Sugestão para desempenho no Firebird
> 
> 
> AA> Para que tal aconteça, você necessita de possuir um IB_SessionProps na
> AA> sua aplicação. Sem IB_session, o "timer" responsável por esta "magia"
> AA> não fica activo.
> 
> Artur, eu acho que não precisa do IB_Session. Durante algumas versões
> do IBO, eu percebi o problema do "timer" e reportei ao Jason. Esse
> "problema", segundo o Jason, foi introduzido com algumas alterações
> que o Geoff tinha feito no IBO. Depois que reportei, o Jason fez
> algumas adaptações no código, pra voltar a funcionar mesmo sem o
> IB_Session. Isso está reportado no release notes de uma das
> subreleases, já nem lembro o número.
> 
> De qq forma, se vc estiver com a última versão do IBO, o lance do
> IB_Session não é pra ser mais necessário... podes fazer uns testes aí
> e depois nos confirmar (ou não) ;-)
> 
> []s
> Cantu (Membro do TeamFB - FireBase)
> http://www.warmboot.com.br
> FireBase - http://www.FireBase.com.br
> Blog - http://blog.firebase.com.br
> 
> 
> 
> ______________________________________________
> 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