Tabela inchada
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:
Para inserir os registros, leio um TStringList com as informações e vou inserindo:
Delphi 7 + Firebird 2.5 + sqlconnection + sqldataset + datasetprovider + clientdataset
attMario
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
Curtidas 0
Respostas
Marcio Teixeira
08/02/2011
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)?
GOSTEI 0
Mario Inacio
08/02/2011
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?
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?
GOSTEI 0
Marco Salles
08/02/2011
Acho que se obtem melhor performance com StoreProcedure nestes casos..
GOSTEI 0
Marcio Teixeira
08/02/2011
Tenho Firebird 2.0 aqui e ta dando conflito. Vou instalar o 2.5 e vejo.
GOSTEI 0
Mario Inacio
08/02/2011
Bom dia amigos,
Resolvi o problema criando um indice para um Campo, mesmo não usando o mesmo.
Obrigado pela atenção.
Resolvi o problema criando um indice para um Campo, mesmo não usando o mesmo.
Obrigado pela atenção.
GOSTEI 0