[delphi-br] Re: Problema Grave com Timeout - Urgente
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
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
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
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
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