Fórum Tabela inchada #395195

08/02/2011

0

Bom dia amigos,
O titulo do tópico ficou meio grotesco, mas é o que de fato está ocorrendo.Tenho um tabela que utilizo somente uma vez no dia, que é o resumo dos registros gerados pelo PAF.O procedimento de inserção de dados nela é igual a todas as outras que faço.Como é de conhecimento de todos os registros do PAF são gerados no micro local e depois enviados ao servidor, quando vou dar um select nos registros ainda não enviados, ele demora uns 30 minutos para retornar, e a tabela tem em torno de 20000 e diariamente não seriam mais que 1000 registros a filtrar.
Se abro a tabela pelo IB e vou navegando pelos registros, ele vai demorando, e se tento dar um select aí trava pelo tempo citado.
Até coloquei o db no mediafire.
Usuário: delphi.select@terra.com.brSenha: delphisel
Select que utilizo:
select * from pafarquivos where coalesce(eserver,0)=0

Para inserir os registros, leio um TStringList com as informações e vou inserindo:
try   Trs.TransactionID  := 16;   Trs.IsolationLevel := xilReadCommitted;   Conexao.StartTransaction(Trs);  { Gravando os registros gerados automaticamente }   with sql_aux99 do begin      for iConta:=0 to ArqP.Count-1 do begin         if Copy(ArqP.Strings[iConta],1,1) = 'R' then begin            CommandText := MontaSQL(1,'pafregistros','','modelo,serie,mfad,caixa,data,registro,strregistro,autentica');            ParamByName('modelo').AsString      := RetInfoPAF('imodelomfd') ;            ParamByName('serie').AsString       := lConfPaf('FAB') ;            ParamByName('mfad').AsString        := RetInfoPAF('imfad') ;            ParamByName('caixa').AsString       := RetInfoPAF('icaixa') ;            ParamByName('data').Asdate          := StringData(cDataMovimento);            ParamByName('registro').AsString    := Copy(ArqP.Strings[iConta],1,1) ;            ParamByName('strregistro').AsString := ArqP.Strings[iConta];            ParamByName('autentica').AsString   := MD5Str(ParamByName('modelo').AsString+                                                          ParamByName('serie').AsString+                                                          ParamByName('mfad').AsString+                                                          ParamByName('caixa').AsString+                                                          ParamByName('data').AsString+                                                          ParamByName('registro').AsString+                                                          ParamByName('strregistro').AsString);            ParamByName('inclusao').AsString    := fMenu.Inclusao;            ParamByName('alteracao').AsString   := RetDataHora ;            ExecSQL;         end;      end;   end;   Conexao.Commit(Trs);except   Conexao.RollBack(Trs);end;

Delphi 7 + Firebird 2.5 + sqlconnection + sqldataset + datasetprovider + clientdataset
attMario
Mario Inacio

Mario Inacio

Responder

Posts

08/02/2011

Marcio Teixeira

Há indice na coluna eserver? Se não há crie um, se há e mesmo assim está lento, provavelmente o coalesce está atrapalhando ele. Ao invés do coalesce não há como garantir que o valor default seja 0 (zero)?
Responder

Gostei + 0

08/02/2011

Mario Inacio

Olá Marcio,
Não é nem tanto ao conteúdo da coluna "eserver" a causa do problema.Vejo que o banco fica sujo ao finalizar a gravação, se faço um backup/restore funciona normal.
Com o banco do jeito que está agora, o mesmo que está no mediafire, ele está inchado, qualquer comando nesta tabela, resultará em lentidão excessiva.
Somente depois de fazer um backup/restore volta ao normal.
De repente tento fazer o backup/restore, criar o indice e ver como fico no proximo dia?
Responder

Gostei + 0

08/02/2011

Marco Salles

Acho que se obtem melhor performance com StoreProcedure nestes casos..
Responder

Gostei + 0

08/02/2011

Marcio Teixeira

Tenho Firebird 2.0 aqui e ta dando conflito. Vou instalar o 2.5 e vejo.
Responder

Gostei + 0

14/03/2011

Mario Inacio

Bom dia amigos,
Resolvi o problema criando um indice para um Campo, mesmo não usando o mesmo.

Obrigado pela atenção.
Responder

Gostei + 0

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

Aceitar