Muito tempo para Efetuar Transacao

16/11/2004

0

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 ?


Pedih

Pedih

Responder

Posts

16/11/2004

Gandalf.nho

Que componente você está usando para o comando INSERT? Quantos registros em média são inseridos de cada vez?


Responder

17/11/2004

Pedih

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.


Responder

17/11/2004

Sremulador

Pudera.....


Responder

17/11/2004

Gandalf.nho

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?


Responder

20/11/2004

Pedih

Pudera.....


Amigo, 1.000 registros num commit acho que é aceitável, vc nao ?


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar