Muito tempo para Efetuar Transacao

Firebird

16/11/2004

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

Curtidas 0

Respostas

Gandalf.nho

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

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

Sremulador

16/11/2004

Pudera.....


GOSTEI 0
Gandalf.nho

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

Pedih

16/11/2004

Pudera.....


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


GOSTEI 0
POSTAR