Pessoal,

Estou com uma bucha aqui pra resolver e preciso muito da ajuda do 
grupo... vamos lá..

No cliente onde trabalho, faço manutenção num sistema feito em D7 com 
Sql Server 2000.

De uns dias pra cá, o sistema começou a dar timeout com bastante 
frequência e quando acontecia isso o DBA verificava via scripts que 
existia um processo bloqueando outro no sql server.

Bom, quais foram meus passos para tentar descobrir qual é o problema 
até agora:

1 - revisei as principais rotinas que sempre travam e também as 
maiores e mais demoradas... num achei nenhum problema, mesmo porque 
essas rotinas sempre funcionaram muito bem. O Sistema já está em 
produção a mais ou menos 1 ano.

2 - estou revisando alguns códigos de acordo com alguns toques que 
recebi de uma pessoa de uma outra empresa que integra o sistema deles 
com o nosso, e que manja muito de sql server. Bom ele pediu para eu 
revisar os momentos em que abro transações no servidor..

Bom, tirei todas as aberturas de transação quando ao chamar 
procedures que fazem somente selects... e mantive somente nos 
momentos em que preciso alterar mais de uma tabela para garantir a 
integridade dos dados...

Bom, nesse lugares que mantive as abertura de transações, o código  
fica assim:


If adoSistema.InTransaction Then
   adoSistema.RollBackTrans ;

adoSistema.BeginTrans;

self.spGeral.Close ;
Self.spGeral.ProcedureName := 'NOME_PROCEDURE_01' ;
self.spGeral.Parameters.Refresh;

//PASSO TODOS OS PARÂMETROS DA PROCEDURE 01

//Executa a SP
Self.spGeral.ExecProc ;

self.spGeral.Close ;
Self.spGeral.ProcedureName := 'NOME_PROCEDURE_02' ;
self.spGeral.Parameters.Refresh;

//PASSO TODOS OS PARÂMETROS DA PROCEDURE 02

//Executa a SP
Self.spGeral.ExecProc ;

//Grava os Dados no bd
adoSistema.CommitTrans ;

Até aí vocês viram algum erro????

Bom, outra coisa, eu estive olhando algumas propriedades do 
TADOConection e gostaria de saber como vocês configuram para comparar 
com as minhas aqui... 

E nos casos de selects onde eu porderia usar tabelas temporárias.. 
existe alguma propriedade que faça com que meu componente adoQuery 
traga os dados sem bloquear a tabela??? Pois tenho casos onde a query 
fica aberta durante processos demorados e acho que isso está gerando 
travamento no banco...

A minha maior dúvida é o que fazer para evitar esses travamentos no 
banco...

Se puderem me ajudar ficarei muito grato...

Marcelo.









Responder a