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

a.lima.silva em terra.com.br a.lima.silva em terra.com.br
Qua Out 5 14:17:25 -03 2016


Obrigado kelver por sua opnião

Em Qua 5/10/16 10:07, Kelver Merlotti kmerlotti em gmail.com escreveu:
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