none
ERRO DE TEMPO EXCEDIDO RRS feed

  • Pergunta

  • Bom noite pessoal, estou com um problema em sistema que utilizo escrito em Visual Basic 6 e SQL Server 2008.

    Tenho um cliente com banco de dados com 702mb... rodando numa maquina i5 com 8gb e ssd 240gb.... tudo perfeitamente rodando

    Estou tento problema em uma consulta apenas.... quero ver todas as vendas de 1 mes especifico....

    SELECT DISTINCT
                          pedidos.COD_PEDIDO AS var_codped, pedidos.DATA_COMPRA, pedidos.SUBTOTAL, pedidos.ValorAcrescReal, pedidos.ValorDescReal, pedidos.TOTAL AS var_total,
                          pedidos.TIPO_PAGAMENTO, pedidos.PAGAMENTO, pedidos.TIPO_PEDIDO, pedidos.COD_CLIENTE, cliente.Nome, parcelas.FORMA_PGTO AS pFormaPgto,
                          parcelas.VALOR_FINAL AS pValorPgto, parcelas.TIPO_CARTAO,
                          (CASE pedidos.TIPO_PAGAMENTO WHEN 'À Prazo' THEN pedidos.PAGAMENTO ELSE parcelas.FORMA_PGTO ENDAS vTipoPgto
    FROM         pedidos INNER JOIN
                          cliente ON pedidos.COD_CLIENTE = cliente.CODIGO INNER JOIN
                          parcelas ON pedidos.COD_PEDIDO = parcelas.COD_PEDIDO
    WHERE     (MONTH(pedidos.DATA_COMPRA) = 2) AND (YEAR(pedidos.DATA_COMPRA) = 2021) AND (pedidos.TIPO_PEDIDO = 'VENDA') AND (pedidos.CANCELADO = '0') AND
                          (pedidos.TIPO_PAGAMENTO = 'À Vista')
    ORDER BY var_codped


    Consulta funcionando normalmente para todos os meses normalmente... porem fevereiro tivemos um aumento de 300% nas vendas.... cliente foi consultar as vendas... o banco de dados avisa que excedeu o tempo limite de consulta.

    Aumentei de 30 para 600 no próprio banco de dados.... deu o mesmo... aumentei para 1000 (16min)

    cn1 = 'Provider=SQLOLEDB.1;Persist Security Info=False;DRIVER={Sql Server};SERVER=' + var_IP + ';uid=sa;pwd=190106web;DATABASE=cyber_base;Connect Timeout=600;TRUSTED_CONNECTION=NO'


    Já alterei no proprio SQL  Managament
    Menu Ferramentas > opções > Designer > tempo 1000

    Cronometrei o tempo no meu relogio... só vai até 30seg e dar o erro de tempo excedido

    O que posso fazer mais?
    quarta-feira, 24 de fevereiro de 2021 22:22

Todas as Respostas

  • WEBIERONLINE,

    Inicialmente vejo que o problema não se refere ao Hardware, mas sim na sua query.....

    Para começar penso que as condições na claúsula Where precisam ser reescritas, devemos evitar utilizar funções como elementos de expressão para receber dados, neste caso não estamos possibilitando ao Query Processor utilizar o conceito de uma condição SARGable, pois o argumento de pesquisa ao qual estamos tentando implementar não esta teoricamente "bem escrito", o que vai forçar o nosso plano de execução ser reescrito antes da sua execução, e isso poderá impactar totalmente no processamento.

    Então, faça esta pequena mudança:

    WHERE (Pedidos.Data_Compra BetWeen '2021-02-01' And '2021-02-28')
    AND (pedidos.TIPO_PEDIDO = 'VENDA') 
    AND (pedidos.CANCELADO = '0') 
    AND (pedidos.TIPO_PAGAMENTO = 'À Vista')
    ORDER BY var_codped

    Note que estou passando a faixa de datas, ao invês de utilizar as funções Month() e Year().

    Além disso, como você destacou que o volume de dados crescimento de forma considerável, penso também que para fazermos um teste, poderíamos remover os operadores Case e ver quanto tempo a sua query demora para ser retornada.

    Por fim, as condições adicionais aplicadas na cláusula Where, relacionadas ao Tipo_Pedido, Cancelado e Tipo_Pagamento realmente são necessários? 

    Se um pedido já representa uma Venda, por que você tem que trazer a coluna cancelado?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 25 de fevereiro de 2021 01:02
  • Boa Noite Junior Galvão,

    Fiz conforme vc me falou... fiz as trocas, removi a case... porem a mesma lentidão

    Para testar, removi tudo relacionado a tabela "Parcelas", deixando somente os campos relacionado as tabelas "Pedidos e Clientes"

    O problema de lentidão foi resolvido... porem, as informações que removi, vou precisar na consulta (para exibição).

    O que vc sugere?

    sábado, 27 de fevereiro de 2021 03:04
  • WEBIERONLINE,

    Neste caso, recomendo analisar a possibilidade de verificar questões de fragmentação, estatísticas desatualizadas ou até mesmo a ausência de índices.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sábado, 27 de fevereiro de 2021 22:50