none
stored RRS feed

  • Pergunta

  • uso stored para mandar movimentação do meu PDV, porem está lento o processo. Quando pego todos os selects, inserts e update contidas na stored e executo em uma new query é super rapido. o que pode está acontecendo?
    quarta-feira, 29 de agosto de 2012 19:54

Todas as Respostas

  • Compare o plano de execução dessas duas "situações" e veja se há diferença.

    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 29 de agosto de 2012 20:02
    Moderador
  • MarceloJSilva

    Coloca o código para que possamos analisar e propor soluções.

    quarta-feira, 29 de agosto de 2012 20:07
  • o plano de execução é o mesmo
    quarta-feira, 29 de agosto de 2012 20:11
  • --etapa 2   Exportando tabela Tecf_01
    INSERT INTO BDEMG.dbo.Saidas(Cod_Produto,Cod_Cliente,Cod_Operador,NDocumento,Data,Hora_Saida,Data_Saida,
       Servico,ES,Especie,Ecf,Vr_Unitario,Quantidade,Vr_Total,Grupo,Situacao,Modelo,
    Vr_Desconto_Item,Num_Serie_Ecf,Loja,Tipo,Secao,Setor,Cod_Vendedor,NU_DAV,Tributacao,
    Somador,NU_Item,UN,AL_MAG,CFOP,CST,Cod_Conta,Cancelado,VR_BASE_ICMS,VR_ICMS,VR_PIS,VR_COFINS,
    VR_ICM_ST,CST_Saida_PIS,CST_Saida_COFINS,VR_Liquido,Aliq_PIS,Aliq_COFINS,BC_PIS,BC_COFINS)
    SELECT Cod_Produto,Cod_Cliente,Cod_Operador,NDocumento,Data,Convert(nvarchar(8),Hora_Saida,108),Data_Saida,
    Servico,ES,Especie,Ecf,Vr_Unitario,Quantidade,Vr_Total,Grupo,Situacao,Modelo,
    Vr_Desconto_Item,Num_Serie_Ecf,Loja,Tipo,Secao,Setor,Cod_Vendedor,NU_DAV,Tributacao,
    Somador,NU_Item,UN,AL_MAG,CFOP,CST,Cod_Conta,Cancelado,VR_BASE_ICMS,VR_ICMS,VR_PIS,VR_COFINS,
    VR_ICM_ST,CST_Saida_PIS,CST_Saida_COFINS,VR_Liquido,Aliq_PIS,Aliq_COFINS,BC_PIS,BC_COFINS FROM dbo.Tecf_01 WITH(NOLOCK)
    WHERE Exp = 0 and Cancelado = 0 


    --etapa 3   Insere na tabela movimentação os produtos que serão baixados..
    INSERT INTO BDEMG.dbo.Movimentacao(Cod_Produto,Quantidade,Data)
    SELECT Cod_Produto, SUM(Quantidade),Data FROM dbo.Tecf_01 WITH(NOLOCK)
    WHERE Exp = 0 AND Cancelado = 0 AND Situacao = 'N' AND Servico = 'N'
    GROUP BY Cod_Produto,Data;

    --etapa 4   Insere na tabela Cancelamento os produtos que ja foram atualizaram e posteriormente foram cancelados
    INSERT INTO BDEMG.dbo.Cancelamento(NDocumento,Ecf,Data,Cod_Produto, Quantidade)
    SELECT NDocumento,Ecf,Data,Cod_Produto, SUM(Quantidade)* -1 FROM dbo.Tecf_01 WITH(NOLOCK)
    WHERE Exp = 0 AND Cancelado = 1 AND Situacao = 'S'
    GROUP BY NDocumento,Ecf,Data,Cod_Produto;

    --etapa 5   Marca que a tabela Tecf_01 foi Exportada.
    UPDATE dbo.tecf_01 Set Exp = 1 WHERE Exp = 0;

    --etapa 6   Exportando tabela Tecf_02...
    INSERT INTO BDEMG.dbo.Receber(Cod_Cliente,NDocumento,DataDocumento,TipoCobranca,
    Vencimento,Valor,Historico,DC,Cod_Operador,Loja,Ecf,Cod_Conta,Rede,Operacao)
    SELECT Cod_Cliente,NDocumento,DataDocumento,TipoCobranca,
    Vencimento,Valor,Historico,DC,Cod_Operador,Loja,Ecf,Cod_Conta,Rede,Operacao FROM dbo.Tecf_02 WITH(NOLOCK)
    WHERE Exp = 0 

    --etapa 7   Marca que a tabela Tecf_02 foi Exportada.
    UPDATE dbo.Tecf_02 SET Exp = 1 WHERE Exp = 0;

    --etapa 8    Exportando tabela Tecf_03
    INSERT INTO BDEMG.dbo.caixa(NDocumento,Ecf,Data,Hora,Vencimento,Especie,Operacao,Valor,St,Cx,
    Cod_Cliente,Cod_Operador,Rede,Loja,Cod_Conta,NU_DAV)
    SELECT  NDocumento,Ecf,Data,Convert(nvarchar(8),Hora,108),Vencimento,Especie,Operacao,Valor,St,Cx,
    Cod_Cliente,Cod_Operador,Rede,Loja,Cod_Conta,NU_DAV FROM dbo.Tecf_03 WITH(NOLOCK)
    WHERE Exp = 0 

    --etapa 9   Marca que a tabela Tecf_03 foi Exportada.
    UPDATE dbo.Tecf_03 SET Exp = 1 WHERE Exp = 0;

    --etapa 10   Exportando tabela Tecf_04...
    INSERT INTO BDEMG.dbo.Recebidas(Cod_Cliente,N_Doc_Compra,D_Doc_Compra,TipoCobranca,Vencimento,
    Valor,Historico,Pago,D_Pagamento,DC,Cod_Operador,Ecf,Loja,Cod_Conta)
    SELECT  Cod_Cliente,N_Doc_Compra,D_Doc_Compra,TipoCobranca,Vencimento,
    Valor,Historico,Pago,D_Pagamento,DC,Cod_Operador,Ecf,Loja,Cod_Conta FROM dbo.Tecf_04 WITH(NOLOCK)
    WHERE Exp = 0 

    --etapa 11   Marca que a tabela Tecf_04 foi Exportada.
    UPDATE dbo.Tecf_04 SET Exp = 1 WHERE Exp = 0;


    --etapa 14   Exportando tabela Reg_T_60...
    INSERT INTO BDEMG.dbo.Reg_T_60(Data,ECF,NSerieECF,ModeloDoc,CooInicial,CooFinal,
    Ncrz,N_cro,G_Total,Venda_Bruta,Aliquota,ValorTotalizador,ES,Especie,ValorICMS,DC,Loja)
    SELECT Data,ECF,NSerieECF,ModeloDoc,CooInicial,CooFinal,
    Ncrz,N_cro,G_Total,Venda_Bruta,Aliquota,ValorTotalizador,ES,
    Especie,ValorICMS,DC,Loja FROM dbo.Reg_T_60 WITH(NOLOCK)
    WHERE Exp = 0 

    --etapa 15   Marca que a tabela Reg_T_60 foi Exportada.
    UPDATE Reg_T_60 SET Exp = 1 WHERE Exp = 0;

    --etapa 16   Chama stored no servidor
    EXECUTE BDEMG.dbo.Atualiza_DB_Server
    @PagaComissao = 0,
    @SVData_Est = '28/08/2012',
    @SVHora_Est = '15:00:00'
    quarta-feira, 29 de agosto de 2012 20:13
  • na realidade a stored acima usa condição if rede = 0 ela faz todo o processo local else faz o processo usando linked. Fazendo uns teste aqui, percebi que deixando so uma condição ficou rapido. O que acontece, a condição if faz atrasar o processo?
    quarta-feira, 29 de agosto de 2012 20:38