[firebase-br] Por favor ajuda sobre conexão dinamica ao banco

Kelver Merlotti kmerlotti em gmail.com
Qua Out 5 09:07:28 -03 2016


Trabalhar com múltiplas conexões dá problema pra quem não sabe trabalhar!
Não escute o que seu colega disse! rs
Se você sabe o que está fazendo, pode seguir em frente nessa abordagem sem
medo.!
Por que digo "se você sabe o que está fazendo"? Porque é preciso ter sempre
em mente:
1. questões referentes a nível de isolamento transacional;
2. o "custo extra" de se iniciar/finalizar uma conexão "o tempo todo"
O item 1 prega peças em muita gente que não entende este conceito. Já o 2
pode sair caro em alguns contextos (mas pode ser minimizado com um pool de
conexões), pois iniciar uma conexão é uma das tarefas mais custosas para o
SGBD.
Na minha opinião não existe uma forma correta. Trabalhar com uma única
conexão e múltiplas transações dá certo também, mas como sempre, depende de
como se implementa o uso dessa conexão e transações.
Só tome cuidado com essa suposição/afirmação de que criar uma conexão
"emula uma thread", são conceitos BEM diferentes!
Abraços,

*Kelver Merlotti*
Embarcadero MVP
Coordenador Editorial da Active Delphi
Twitter: http://www.twitter.com/kmerlotti

2016-10-05 8:20 GMT-03:00 <a.lima.silva em terra.com.br>:

> Caros colegas de lista, solicito a ajuda dos companheiros na seguinte
> questão :
>
> Ambiente : Firebird 2.5 Super Classic  , Delphi XE DBExpress e 55 estações.
>
> Recebi um sistema  feito em Delphi 7 para migrar para Delphi XE, tive que
> modificar a estrutura  de transações do DBX do D7
>
> de:
>
> var TD: TTransactionDesc;
> ...
> TD.TransactionID := Random(999999999);TD.IsolationLevel :=
> xilREADCOMMITTED;Banco.StartTransaction(TD);
>
> para :
>
> var
> T  : TDBXTransaction;
> Conn : T SQLConnection
> ...
> T := Conn.SqlConection.BeginTransaction(TDBXIsolations.ReadCommitted);
> Conn.CommitFreeAndNil(TransSelect);
> ...
>
> Neste sistema 90% do processamento é realizado por StoredProcedures
> atraves do objeto TSQLStoredProc
>
> Estranhamente verifiquei travamentos nessas SP, mesmo no aplicativo
> estando sendo explicitamente iniciado e finalizado uma transação
>
> Nostalgicamente lembrei que quando usava IBX como componente de acesso,
>  fazia meu StartTransaction e Commit e não havia esse problema.
>
> Para contornar essa situação, comecei a criar em RunTime as conexões a
> partir do TSQLConnection , iniciar , executar, finalizar a transação e
> destruir a conexão.
>
> Realmente feito isso destravou e o monitor do IBExpert nem mesmo consegue
> registrar a existência dessas conexões adicionais.
>
> Um DBA que conversei  ( especialista em Oracle e aplicativos web mobile  )
> disse que no Oracle não se deve manter conexões aberta por muito tempo e
> essa é a maneira correta.
>
> Um colega antigo que trabalha com Delphi disse que terei inúmeros
> problemas ao fazer as ações  fora da conexão principal.
>
> Nos exemplos que vejo na internet vejo as aplicações por um SQLConnection
> criam uma conexao e tudo trafega dentro do contexto dessa conexão ( o que
> era feito ).
>
> Percebi em laboratório um aumento  em muito grande da velocidade, parece
> que fazer por conexões separadas  da principal "emula uma Thread" , mas
> ante a inexperiência se o  caminho adotado vai me dar problemas sérios
> futuros, resolvi ler mais e perguntar aos especialistas do uso diário.
>> Obrigado.
>
>
> ______________________________________________
> 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://www.firebase.com.br/
> pesquisa_lista.html



Mais detalhes sobre a lista de discussão lista