ATUALIZACAO EM LOOP ACCESS

JADSON 28/02/2013 08:47:16
#419712
Bom dia, tenho um sistema funcionando em rede aqui na empresa que trabalho, porém não sou da equipe de TI, logo não tenho acesso as configurações de rede, nem seus limites, dito isso vamos aos fatos.

O sistema tem um processo de atualização onde este busca informações em algumas tabelas excel um total de dez faz um processo de comparação de dados e então envia a gravação para um banco de dados (Update ou Insert).

Total de Registros alterados: aproximadamente 5.000

Duração da atualização em Rede: aproximadamente 4 (quatro) HORAS
Duração da atualização Local: aproximadamente 4 (quatro) Minutos.

Fiz uma rotina onde consigo ver qual função está demorando e é justamente a função de Update e insert, logo todas as comparações que são feitas passam rapidamente.

Segue anexo com os comparativos, nele podemos ver que em algumas vezes tenho um pico de atualização de em média 08 registros por segundo e na maioria da vezes demora-se até 05 segundos por registro.

O que poderia ser isso?

Grato
LLAIA 28/02/2013 11:13:05
#419719
Resposta escolhida
Cara, vai ser difícil ver assim. seria bom se pudéssemos ver como esses insert e update estão sendo realizados. Pela demora, parece que estão dando loops no recordset e fazendo os procedimentos de inserção e atualização, em vez de usar DML.
JADSON 28/02/2013 12:26:01
#419725
Colocar o código todo é difícil pois é extenso, porém os códigos de busca e preenchimento de variáveis estão fluindo bem, o problema está no código abaixo:

Private Sub Modificar_BD()


Try



If Not vStatusProgramacao = [Ô]Encerrado[Ô] Then

[ô]ComandoModificaPendente.CommandText = [Ô]UPDATE tblOrdem SET [Ô] & CamposModificarPendente & vParametro
ComandoModificaPendente.Parameters.Clear()
ComandoModificaPendente.Parameters.Add([Ô]@TipoNota[Ô], OleDbType.VarWChar, 2).Value = IIf(vTipoNota <> Nothing, vTipoNota, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Nota[Ô], OleDbType.VarWChar, 50).Value = IIf(vNota <> Nothing, vNota, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Ordem[Ô], OleDbType.VarWChar, 10).Value = vOrdem
ComandoModificaPendente.Parameters.Add([Ô]@OrdemSuperior[Ô], OleDbType.VarWChar, 50).Value = IIf(vOrdemSuperior <> Nothing, vOrdemSuperior, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@LocalInstalacao[Ô], OleDbType.VarWChar, 100).Value = IIf(vLocalInstalacao <> Nothing, vLocalInstalacao, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Responsavel[Ô], OleDbType.VarWChar, 255).Value = IIf(vResponsavel <> Nothing, vResponsavel, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@TextoBreve[Ô], OleDbType.VarWChar, 100).Value = Convert.ToString(vTextoBreve)
ComandoModificaPendente.Parameters.Add([Ô]@DataBaseInicio[Ô], OleDbType.Date).Value = IIf(vDataBaseInicio <> Nothing, vDataBaseInicio, DBNull.Value)
ComandoModificaPendente.Parameters.Add([Ô]@DataBaseFim[Ô], OleDbType.Date).Value = IIf(vDataBaseFim <> Nothing, vDataBaseFim, DBNull.Value)
ComandoModificaPendente.Parameters.Add([Ô]@AutorNota[Ô], OleDbType.VarWChar, 50).Value = IIf(vAutorNota <> Nothing, vAutorNota, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@StatusProgramacao[Ô], OleDbType.VarWChar, 255).Value = vStatusProgramacao
ComandoModificaPendente.Parameters.Add([Ô]@DataInicioReal[Ô], OleDbType.Date).Value = IIf(vDataInicioReal <> Nothing, vDataInicioReal, DBNull.Value)
ComandoModificaPendente.Parameters.Add([Ô]@DataFimReal[Ô], OleDbType.Date).Value = IIf(vDataFimReal <> Nothing, vDataFimReal, DBNull.Value)
ComandoModificaPendente.Parameters.Add([Ô]@LocalSAP[Ô], OleDbType.VarWChar, 255).Value = IIf(vLocalSAP <> Nothing, vLocalSAP, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Executante[Ô], OleDbType.VarWChar, 255).Value = IIf(vExecutante <> Nothing, vExecutante, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@MotivoIndisponivel[Ô], OleDbType.VarWChar, 255).Value = IIf(vMotivoIndisponivel <> Nothing, vMotivoIndisponivel, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@StatusSAP[Ô], OleDbType.VarWChar, 255).Value = IIf(vStatusSAP <> Nothing, vStatusSAP, DBNull.Value)
ComandoModificaPendente.Parameters.Add([Ô]@TipoAtividade[Ô], OleDbType.VarWChar, 255).Value = IIf(vTipoAtividade <> Nothing, vTipoAtividade, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@ImpactoFalha[Ô], OleDbType.VarWChar, 1).Value = IIf(vImpactoFalha <> Nothing, vImpactoFalha, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@OrdemNova[Ô], OleDbType.Boolean).Value = False
ComandoModificaPendente.Parameters.Add([Ô]@Medida[Ô], OleDbType.VarWChar, 50).Value = IIf(vItemMedida <> Nothing, vItemMedida, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Criticidade[Ô], OleDbType.VarWChar, 50).Value = IIf(vCriticidade <> Nothing, vCriticidade, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@StatusMedida[Ô], OleDbType.VarWChar, 50).Value = IIf(vStatusMedida <> Nothing, vStatusMedida, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Plano[Ô], OleDbType.VarWChar, 50).Value = IIf(vPlanoManutencao <> Nothing, vPlanoManutencao, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@HHPlanejado[Ô], OleDbType.VarWChar, 50).Value = IIf(vHHPrevisto <> Nothing, vHHPrevisto, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@HHRealizado[Ô], OleDbType.VarWChar, 50).Value = IIf(vHHRealizado <> Nothing, vHHRealizado, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@DataAtualizacao[Ô], OleDbType.Date).Value = Now()
ComandoModificaPendente.Parameters.Add([Ô]@CodPlanejamento[Ô], OleDbType.VarWChar, 50).Value = IIf(vCodPlanejamento <> Nothing, vCodPlanejamento, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@StatusUsuario[Ô], OleDbType.VarWChar, 50).Value = IIf(vStatusUsuario <> Nothing, vStatusUsuario, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@AcompanhaIndice[Ô], OleDbType.Boolean).Value = vAcompanhaIndice
ComandoModificaPendente.Parameters.Add([Ô]@TextoLongo[Ô], OleDbType.LongVarWChar).Value = IIf(vTextoLongo <> Nothing, Convert.ToString(vTextoLongo.ToString), [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@NumeroAplat[Ô], OleDbType.VarWChar, 255).Value = IIf(vNumeroAplat <> Nothing, vNumeroAplat, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@Etapa[Ô], OleDbType.VarWChar, 255).Value = IIf(vEtapa <> Nothing, vEtapa, [Ô][Ô])
ComandoModificaPendente.Parameters.Add([Ô]@DescricaoEtapa[Ô], OleDbType.VarWChar, 255).Value = IIf(vDescricaoEtapa <> Nothing, Convert.ToString(vDescricaoEtapa.ToString), [Ô][Ô])

ComandoModificaPendente.CommandText = [Ô]UPDATE tblOrdem SET [Ô] & CamposModificarPendente & vParametro
ComandoModificaPendente.ExecuteNonQuery()

Else

[ô]ComandoModificaEncerrada.CommandText = [Ô]UPDATE tblOrdem SET [Ô] & CamposModificarEncerrada & vParametro

ComandoModificaEncerrada.Parameters.Clear()
ComandoModificaEncerrada.Parameters.Add([Ô]@TipoNota[Ô], OleDbType.VarWChar, 2).Value = IIf(vTipoNota <> Nothing, vTipoNota, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Nota[Ô], OleDbType.VarWChar, 50).Value = IIf(vNota <> Nothing, vNota, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Ordem[Ô], OleDbType.VarWChar, 10).Value = vOrdem
ComandoModificaEncerrada.Parameters.Add([Ô]@OrdemSuperior[Ô], OleDbType.VarWChar, 50).Value = IIf(vOrdemSuperior <> Nothing, vOrdemSuperior, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@LocalInstalacao[Ô], OleDbType.VarWChar, 100).Value = IIf(vLocalInstalacao <> Nothing, vLocalInstalacao, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Responsavel[Ô], OleDbType.VarWChar, 255).Value = IIf(vResponsavel <> Nothing, vResponsavel, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@TextoBreve[Ô], OleDbType.VarWChar, 100).Value = Convert.ToString(vTextoBreve)
ComandoModificaEncerrada.Parameters.Add([Ô]@DataBaseInicio[Ô], OleDbType.Date).Value = IIf(vDataBaseInicio <> Nothing, vDataBaseInicio, DBNull.Value)
ComandoModificaEncerrada.Parameters.Add([Ô]@DataBaseFim[Ô], OleDbType.Date).Value = IIf(vDataBaseFim <> Nothing, vDataBaseFim, DBNull.Value)
ComandoModificaEncerrada.Parameters.Add([Ô]@AutorNota[Ô], OleDbType.VarWChar, 50).Value = IIf(vAutorNota <> Nothing, vAutorNota, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@StatusProgramacao[Ô], OleDbType.VarWChar, 255).Value = vStatusProgramacao
ComandoModificaEncerrada.Parameters.Add([Ô]@DataInicioReal[Ô], OleDbType.Date).Value = IIf(vDataInicioReal <> Nothing, vDataInicioReal, DBNull.Value)
ComandoModificaEncerrada.Parameters.Add([Ô]@DataFimReal[Ô], OleDbType.Date).Value = IIf(vDataFimReal <> Nothing, vDataFimReal, DBNull.Value)
ComandoModificaEncerrada.Parameters.Add([Ô]@LocalSAP[Ô], OleDbType.VarWChar, 255).Value = IIf(vLocalSAP <> Nothing, vLocalSAP, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Executante[Ô], OleDbType.VarWChar, 255).Value = IIf(vExecutante <> Nothing, vExecutante, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@MotivoIndisponivel[Ô], OleDbType.VarWChar, 255).Value = IIf(vMotivoIndisponivel <> Nothing, vMotivoIndisponivel, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@StatusSAP[Ô], OleDbType.VarWChar, 255).Value = IIf(vStatusSAP <> Nothing, vStatusSAP, DBNull.Value)
ComandoModificaEncerrada.Parameters.Add([Ô]@TipoAtividade[Ô], OleDbType.VarWChar, 255).Value = IIf(vTipoAtividade <> Nothing, vTipoAtividade, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@ImpactoFalha[Ô], OleDbType.VarWChar, 1).Value = IIf(vImpactoFalha <> Nothing, vImpactoFalha, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@OrdemNova[Ô], OleDbType.Boolean).Value = False
ComandoModificaEncerrada.Parameters.Add([Ô]@Medida[Ô], OleDbType.VarWChar, 50).Value = IIf(vItemMedida <> Nothing, vItemMedida, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Criticidade[Ô], OleDbType.VarWChar, 50).Value = IIf(vCriticidade <> Nothing, vCriticidade, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@StatusMedida[Ô], OleDbType.VarWChar, 50).Value = IIf(vStatusMedida <> Nothing, vStatusMedida, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@Plano[Ô], OleDbType.VarWChar, 50).Value = IIf(vPlanoManutencao <> Nothing, vPlanoManutencao, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@HHPlanejado[Ô], OleDbType.VarWChar, 50).Value = IIf(vHHPrevisto <> Nothing, vHHPrevisto, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@HHRealizado[Ô], OleDbType.VarWChar, 50).Value = IIf(vHHRealizado <> Nothing, vHHRealizado, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@DataAtualizacao[Ô], OleDbType.Date).Value = Now()
ComandoModificaEncerrada.Parameters.Add([Ô]@CodPlanejamento[Ô], OleDbType.VarWChar, 50).Value = IIf(vCodPlanejamento <> Nothing, vCodPlanejamento, [Ô][Ô])
ComandoModificaEncerrada.Parameters.Add([Ô]@StatusUsuario[Ô], OleDbType.VarWChar, 50).Value = IIf(
LLAIA 28/02/2013 18:40:07
#419743
Percebo que vc está indo de registro em registro, transferindo seus valores para variáveis e depois criando os parâmetros. Acho que dá pra tentar atacar o problema de 1 forma: Usar BeginTrans e CommitTrans caso não estejam sendo usados.

Se for Access, acho que só resolve mesmo se vc rodar sua rotina no Servidor, pois pela rede é osso essa quantidade de registros pro Access.
Tópico encerrado , respostas não são mais permitidas