Muito tempo para Efetuar Transacao
Configuracao
WIN2000Server PIV 2.8Ghz H.T.
1GB RAM, 1MB Cache, HD80 GB
FB 1.5 (extensao do arquivo .FDB)
Utilizo componentes DBXpress.
Amigos,
estou tendo problemas em minhas aplicacoes. Muito tempo para Gravar (Commit) apos terminar o WHILE NOT EOF.
meu codigo.
//============= INSTRUCAO DE INSERIR BILHETE
dm.Q1.SQL.Text := ´INSERT INTO BILHETES (´+
´RAMAL, ´+
´TRONCO, ´+
´DATA, ´+
´INICIO, ´+
´DURACAO, ´+
´TEMPOATENDER, ´+
´NUMEROTELEFONE, ´+
´NUMEROTELEFONELIMPO, ´+
´TRANSFERIDA, ´+
´SIGLA, ´+
´CUSTO, ´+
´TIPOLIGACAO, ´+
´CODIGOTRANSACIONADOR, ´+
´IDMUNICIPIO, ´+
´ENTSAI) VALUES (´+
´:RAMAL, ´+
´:TRONCO, ´+
´:DATA, ´+
´:INICIO, ´+
´:DURACAO, ´+
´:TEMPOATENDER, ´+
´:NUMEROTELEFONE, ´+
´:NUMEROTELEFONELIMPO, ´+
´:TRANSFERIDA, ´+
´:SIGLA, ´+
´:CUSTO, ´+
´:TIPOLIGACAO, ´+
´:CODIGOTRANSACIONADOR, ´+
´:IDMUNICIPIO, ´+
´:ENTSAI) ´;
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREADCOMMITTED;
dm.Conexao.StartTransaction(Transacao);
while not Dbf1.Eof do begin
linhas desnecessarias de codigo eu removi.
dm.Q1.ParamByName(´RAMAL´).AsString := Ramal;
dm.Q1.ParamByName(´TRONCO´).AsInteger := NumeroTronco;
dm.Q1.ParamByName(´DATA´).AsDate := Data;
dm.Q1.ParamByName(´INICIO´).AsString := Inicio;
dm.Q1.ParamByName(´DURACAO´).AsString := Duracao;
dm.Q1.ParamByName(´TEMPOATENDER´).AsString := TempoAtender;
dm.Q1.ParamByName(´NUMEROTELEFONE´).AsString := NumeroTelefone;
dm.Q1.ParamByName(´NUMEROTELEFONELIMPO´).AsString := TelefoneLimpo;
dm.Q1.ParamByName(´TRANSFERIDA´).AsString := LigacaoTransf;
dm.Q1.ParamByName(´ENTSAI´).AsString := EntSai;
dm.Q1.ParamByName(´SIGLA´).AsString := SiglaServico;
dm.Q1.ParamByName(´CUSTO´).AsCurrency := CustoLigacao;
dm.Q1.ParamByName(´IDMUNICIPIO´).AsInteger := IDMunicipio;
dm.Q1.ParamByName(´TIPOLIGACAO´).AsString := TipoLigacao;
dm.Q1.ParamByName(´CODIGOTRANSACIONADOR´).AsInteger := CodigoTransacionador;
dm.Q1.ExecSQL();
Dbf1.Next;
Inc(QdeReg, 1);
end;
=======
= até aqui, roda super bem e rapido =
dm.Conexao.Commit(Transacao);
== mas para executar esse comando acima, chega a demorar 10 minutos travando o terminal server.
e mais, somente eu estou usando o banco neste instante, nem tem problemas de updates concorrentes no banco.
MessageDlg(´Pronto´, mtInformation, [mbok], 0);
== fim ==
O que poderia ser ?
as vezes, essa transacao ´dm.Conexao.Commit(Transacao)´ demora certa de 10 minutos para ser efetivada, q loucura.
Qde. de Registros no banco: 40.000 +-
Tamanho do .FDB: 15MB.
Pouquissimos indices.
Alguem tem alguma ideia para ajudar ?
WIN2000Server PIV 2.8Ghz H.T.
1GB RAM, 1MB Cache, HD80 GB
FB 1.5 (extensao do arquivo .FDB)
Utilizo componentes DBXpress.
Amigos,
estou tendo problemas em minhas aplicacoes. Muito tempo para Gravar (Commit) apos terminar o WHILE NOT EOF.
meu codigo.
//============= INSTRUCAO DE INSERIR BILHETE
dm.Q1.SQL.Text := ´INSERT INTO BILHETES (´+
´RAMAL, ´+
´TRONCO, ´+
´DATA, ´+
´INICIO, ´+
´DURACAO, ´+
´TEMPOATENDER, ´+
´NUMEROTELEFONE, ´+
´NUMEROTELEFONELIMPO, ´+
´TRANSFERIDA, ´+
´SIGLA, ´+
´CUSTO, ´+
´TIPOLIGACAO, ´+
´CODIGOTRANSACIONADOR, ´+
´IDMUNICIPIO, ´+
´ENTSAI) VALUES (´+
´:RAMAL, ´+
´:TRONCO, ´+
´:DATA, ´+
´:INICIO, ´+
´:DURACAO, ´+
´:TEMPOATENDER, ´+
´:NUMEROTELEFONE, ´+
´:NUMEROTELEFONELIMPO, ´+
´:TRANSFERIDA, ´+
´:SIGLA, ´+
´:CUSTO, ´+
´:TIPOLIGACAO, ´+
´:CODIGOTRANSACIONADOR, ´+
´:IDMUNICIPIO, ´+
´:ENTSAI) ´;
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREADCOMMITTED;
dm.Conexao.StartTransaction(Transacao);
while not Dbf1.Eof do begin
linhas desnecessarias de codigo eu removi.
dm.Q1.ParamByName(´RAMAL´).AsString := Ramal;
dm.Q1.ParamByName(´TRONCO´).AsInteger := NumeroTronco;
dm.Q1.ParamByName(´DATA´).AsDate := Data;
dm.Q1.ParamByName(´INICIO´).AsString := Inicio;
dm.Q1.ParamByName(´DURACAO´).AsString := Duracao;
dm.Q1.ParamByName(´TEMPOATENDER´).AsString := TempoAtender;
dm.Q1.ParamByName(´NUMEROTELEFONE´).AsString := NumeroTelefone;
dm.Q1.ParamByName(´NUMEROTELEFONELIMPO´).AsString := TelefoneLimpo;
dm.Q1.ParamByName(´TRANSFERIDA´).AsString := LigacaoTransf;
dm.Q1.ParamByName(´ENTSAI´).AsString := EntSai;
dm.Q1.ParamByName(´SIGLA´).AsString := SiglaServico;
dm.Q1.ParamByName(´CUSTO´).AsCurrency := CustoLigacao;
dm.Q1.ParamByName(´IDMUNICIPIO´).AsInteger := IDMunicipio;
dm.Q1.ParamByName(´TIPOLIGACAO´).AsString := TipoLigacao;
dm.Q1.ParamByName(´CODIGOTRANSACIONADOR´).AsInteger := CodigoTransacionador;
dm.Q1.ExecSQL();
Dbf1.Next;
Inc(QdeReg, 1);
end;
=======
= até aqui, roda super bem e rapido =
dm.Conexao.Commit(Transacao);
== mas para executar esse comando acima, chega a demorar 10 minutos travando o terminal server.
e mais, somente eu estou usando o banco neste instante, nem tem problemas de updates concorrentes no banco.
MessageDlg(´Pronto´, mtInformation, [mbok], 0);
== fim ==
O que poderia ser ?
as vezes, essa transacao ´dm.Conexao.Commit(Transacao)´ demora certa de 10 minutos para ser efetivada, q loucura.
Qde. de Registros no banco: 40.000 +-
Tamanho do .FDB: 15MB.
Pouquissimos indices.
Alguem tem alguma ideia para ajudar ?
Pedih
Curtidas 0
Respostas
Gandalf.nho
16/11/2004
Que componente você está usando para o comando INSERT? Quantos registros em média são inseridos de cada vez?
GOSTEI 0
Pedih
16/11/2004
Que componente você está usando para o comando INSERT? Quantos registros em média são inseridos de cada vez?
componente: dm.Q1.ExecSQL(); (TSQLQuery)
em media: 1.000 registros no momento do commit.
GOSTEI 0
Sremulador
16/11/2004
Pudera.....
GOSTEI 0
Gandalf.nho
16/11/2004
A gravação é feita numa máquina remota? Não dá para diminuir a qtd de registros gravados de cada vez? Já experimentou usar componentes de acesso direto (IBX e similares) para ver se melhora o desempenho?
GOSTEI 0
Pedih
16/11/2004
Pudera.....
Amigo, 1.000 registros num commit acho que é aceitável, vc nao ?
GOSTEI 0