[delphi-br] Re: Problema Grave com Timeout - Urgente

2006-11-27 Por tôpico maniacapordelphi
A primeira coisa q voce tem q saber é de onde vem a mensagem: do 
componente ADOConnection ou do Sql Server. 

Se for do ADO:
No componente ADOConnection tem a propriedade ConnectionTime - set 
para 1000
Nos componente TADOquery e TADOStoredProc tem a propriedade 
CommandTime - set para 1000

Se for do Sql Server:
Você tem q analisar a performance de todos os seus comandos através 
do Profile. Pode ser comandos mal projetados

T+
Mani




--- Em delphi-br@yahoogrupos.com.br, Marcelo Alves 
[EMAIL PROTECTED] escreveu

 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.





Re: [delphi-br] Re: Problema Grave com Timeout - Urgente

2006-11-27 Por tôpico Gabriel Filho
Uma dica

qdo vc usa o transaction  no adoconection, a tabela é bloqueada
automáticamente,
entaum como vc disse que tem operacoes que demoram muito pra ser
processadas,
analise, para ver se é possivel dividir essa transacao muito grande em
duas ou tres menores.

Verifique tambem se vc consegue otimizar melhor seu scripts, tipo sub
consultas dentro de selects que retornam muito dados.
uma boa maneira de fazer isso é utilizando o studio mananger express, nele
tem uma ferramente que analiza seu scritp te retornando em %
qual do consumo de cada bloq de select count inner joins etc...



espero ter ajudado

Em 27/11/06, maniacapordelphi [EMAIL PROTECTED] escreveu:

   A primeira coisa q voce tem q saber é de onde vem a mensagem: do
 componente ADOConnection ou do Sql Server.

 Se for do ADO:
 No componente ADOConnection tem a propriedade ConnectionTime - set
 para 1000
 Nos componente TADOquery e TADOStoredProc tem a propriedade
 CommandTime - set para 1000

 Se for do Sql Server:
 Você tem q analisar a performance de todos os seus comandos através
 do Profile. Pode ser comandos mal projetados

 T+
 Mani

 --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br,
 Marcelo Alves
 [EMAIL PROTECTED] escreveu
 
  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.
 

  



[As partes desta mensagem que não continham texto foram removidas]



[delphi-br] Re: Problema Grave com Timeout - Urgente

2006-11-27 Por tôpico Marcelo Alves
Bom, quanto a quebrar em várias transações menores, não tenho como 
fazer isso uma vez que devo manter a integridade dos dados gravados.

Aumentei o connectiontimeout para 1000 conforme sugeriram abaixo...

Agora e quanto às outras propriedades??? Não tem mais nada que devo 
me preocupar para evitar esses travamentos?

Obrigado até agora gente.

Att,

Marcelo


--- Em delphi-br@yahoogrupos.com.br, Gabriel Filho 
[EMAIL PROTECTED] escreveu

 Uma dica
 
 qdo vc usa o transaction  no adoconection, a tabela é bloqueada
 automáticamente,
 entaum como vc disse que tem operacoes que demoram muito pra ser
 processadas,
 analise, para ver se é possivel dividir essa transacao 
muito grande em
 duas ou tres menores.
 
 Verifique tambem se vc consegue otimizar melhor seu scripts, tipo 
sub
 consultas dentro de selects que retornam muito dados.
 uma boa maneira de fazer isso é utilizando o studio mananger 
express, nele
 tem uma ferramente que analiza seu scritp te retornando em %
 qual do consumo de cada bloq de select count inner joins etc...
 
 
 
 espero ter ajudado
 
 Em 27/11/06, maniacapordelphi [EMAIL PROTECTED] escreveu:
 
A primeira coisa q voce tem q saber é de onde vem a mensagem: do
  componente ADOConnection ou do Sql Server.
 
  Se for do ADO:
  No componente ADOConnection tem a propriedade ConnectionTime - 
set
  para 1000
  Nos componente TADOquery e TADOStoredProc tem a propriedade
  CommandTime - set para 1000
 
  Se for do Sql Server:
  Você tem q analisar a performance de todos os seus comandos 
através
  do Profile. Pode ser comandos mal projetados
 
  T+
  Mani
 
  --- Em delphi-br@yahoogrupos.com.br delphi-br%
40yahoogrupos.com.br,
  Marcelo Alves
  delphigrupos@ escreveu
  
   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.
  
 
   
 
 
 
 [As partes desta mensagem que não continham texto foram removidas]





Re: [delphi-br] Re: Problema Grave com Timeout - Urgente

2006-11-27 Por tôpico Leandro
Cara,

Quanto tive esse problema, recriava o indice clustered da tabela que tava 
causando o timeout...
e fica ok...

Não sei se é o seu caso...

att,

Leandro

  - Original Message - 
  From: Marcelo Alves 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Monday, November 27, 2006 2:30 PM
  Subject: [delphi-br] Re: Problema Grave com Timeout - Urgente


  Bom, quanto a quebrar em várias transações menores, não tenho como 
  fazer isso uma vez que devo manter a integridade dos dados gravados.

  Aumentei o connectiontimeout para 1000 conforme sugeriram abaixo...

  Agora e quanto às outras propriedades??? Não tem mais nada que devo 
  me preocupar para evitar esses travamentos?

  Obrigado até agora gente.

  Att,

  Marcelo

  --- Em delphi-br@yahoogrupos.com.br, Gabriel Filho 
  [EMAIL PROTECTED] escreveu
  
   Uma dica
   
   qdo vc usa o transaction no adoconection, a tabela é bloqueada
   automáticamente,
   entaum como vc disse que tem operacoes que demoram muito pra ser
   processadas,
   analise, para ver se é possivel dividir essa transacao 
  muito grande em
   duas ou tres menores.
   
   Verifique tambem se vc consegue otimizar melhor seu scripts, tipo 
  sub
   consultas dentro de selects que retornam muito dados.
   uma boa maneira de fazer isso é utilizando o studio mananger 
  express, nele
   tem uma ferramente que analiza seu scritp te retornando em %
   qual do consumo de cada bloq de select count inner joins etc...
   
   
   
   espero ter ajudado
   
   Em 27/11/06, maniacapordelphi [EMAIL PROTECTED] escreveu:
   
A primeira coisa q voce tem q saber é de onde vem a mensagem: do
componente ADOConnection ou do Sql Server.
   
Se for do ADO:
No componente ADOConnection tem a propriedade ConnectionTime - 
  set
para 1000
Nos componente TADOquery e TADOStoredProc tem a propriedade
CommandTime - set para 1000
   
Se for do Sql Server:
Você tem q analisar a performance de todos os seus comandos 
  através
do Profile. Pode ser comandos mal projetados
   
T+
Mani
   
--- Em delphi-br@yahoogrupos.com.br delphi-br%
  40yahoogrupos.com.br,
Marcelo Alves
delphigrupos@ escreveu

 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

Re: [delphi-br] Re: Problema Grave com Timeout - Urgente

2006-11-27 Por tôpico Gabriel Filho
só mais uma coisa, definindo o CommandTimeout = 1000;

vc esta dizendo q vai aguardar 1000 segundos pela resposta do
servidor, se por acaso na hora em q vc for conectar o serividor estiver
indisponível,
sua aplicação ficará travada aguardando durante 1000 segundos.

Tome cuidado.

Em 27/11/06, Leandro [EMAIL PROTECTED] escreveu:

   Cara,

 Quanto tive esse problema, recriava o indice clustered da tabela que tava
 causando o timeout...
 e fica ok...

 Não sei se é o seu caso...

 att,

 Leandro


 - Original Message -
 From: Marcelo Alves
 To: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
 Sent: Monday, November 27, 2006 2:30 PM
 Subject: [delphi-br] Re: Problema Grave com Timeout - Urgente

 Bom, quanto a quebrar em várias transações menores, não tenho como
 fazer isso uma vez que devo manter a integridade dos dados gravados.

 Aumentei o connectiontimeout para 1000 conforme sugeriram abaixo...

 Agora e quanto às outras propriedades??? Não tem mais nada que devo
 me preocupar para evitar esses travamentos?

 Obrigado até agora gente.

 Att,

 Marcelo

 --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br,
 Gabriel Filho
 [EMAIL PROTECTED] escreveu
 
  Uma dica
 
  qdo vc usa o transaction no adoconection, a tabela é bloqueada
  automáticamente,
  entaum como vc disse que tem operacoes que demoram muito pra ser
  processadas,
  analise, para ver se é possivel dividir essa transacao
 muito grande em
  duas ou tres menores.
 
  Verifique tambem se vc consegue otimizar melhor seu scripts, tipo
 sub
  consultas dentro de selects que retornam muito dados.
  uma boa maneira de fazer isso é utilizando o studio mananger
 express, nele
  tem uma ferramente que analiza seu scritp te retornando em %
  qual do consumo de cada bloq de select count inner joins etc...
 
 
 
  espero ter ajudado
 
  Em 27/11/06, maniacapordelphi [EMAIL PROTECTED] escreveu:
  
   A primeira coisa q voce tem q saber é de onde vem a mensagem: do
   componente ADOConnection ou do Sql Server.
  
   Se for do ADO:
   No componente ADOConnection tem a propriedade ConnectionTime -
 set
   para 1000
   Nos componente TADOquery e TADOStoredProc tem a propriedade
   CommandTime - set para 1000
  
   Se for do Sql Server:
   Você tem q analisar a performance de todos os seus comandos
 através
   do Profile. Pode ser comandos mal projetados
  
   T+
   Mani
  
   --- Em delphi-br@yahoogrupos.com.br 
   delphi-br%40yahoogrupos.com.brdelphi-br%
 40yahoogrupos.com.br,
   Marcelo Alves
   delphigrupos@ escreveu
   
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