none
Plano de Execução com Custo 0% RRS feed

  • Pergunta

  • Bom dia !

    Tem uma consulta que ficou em execução durante 18  horas e não concluiu . Ao verificar o plano de execução , o custo esta em quase todas as etapas igual a zero. Como identificar uma falha no plano de execução ?!  As estatísticas do banco de dados em questão já  estão atualizadas.

    Versão do SQL: Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
            Apr  2 2010 15:48:46
            Copyright (c) Microsoft Corporation
            Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601:
    Service Pack 1)

    Segue a Query , que não esta muito bem elaborada, mas a alguns dias funcionava normalmente:

    SELECT T.COD_TIT
    FROM
       CREDORES C WITH(NOLOCK),
       FILTROS_TITULOS FT WITH(NOLOCK),
       TITULOS T WITH(NOLOCK),
       ULT_OCOR_TIT U WITH(NOLOCK),
       V_TITULOS_PARC VTP WITH(NOLOCK)
    WHERE T.COD_CRED = C.COD_CRED
    AND T.COD_TIT = VTP.COD_TIT
    AND U.COD_TIT = T.COD_TIT
    AND FT.COD_TIT = T.COD_TIT AND FT.COD_FIL = 9168
     AND  T.COD_TIT IN (     select distinct t.cod_tit
                                                    from titulos t (nolock)
                                                             inner join
    ult_ocor_tit u (nolock) on u.cod_tit = t.cod_tit     
                                                             inner join parcelas
    p (nolock) on p.cod_tit = t.cod_tit
                                                             inner join
    aux_itau_cartao ax (nolock) on ax.cod_tit = t.cod_tit
                                                             inner join   (
    select cod_tit
            
    ,modelo1
            
    ,dt_entrada
            
    ,row_number() over(partition by cod_tit order by dt_entrada desc) as
    sequencia
            
    from filtros.dbo.PROPENSAO_ITAU_NOVO_MODELO
            
    ) po on po.cod_tit = t.cod_tit 
                                                    where t.cod_cred = 79
                                                    and Modelo1 in
    ('C04','C05','C6','C7') 
                                                    and u.estagio_tit not in
    (4,7)
                                                    and t.parcelado_tit = 0
                                                    and dt_bord_parc between
    GETDATE () -7 and GETDATE ()
                                                    and t.dt_expir_tit >
    getdate()+ 01
                                                    and
    cast(ax.valor_divida_desconto as money) >= 5000
                                                    and (sequencia = 1 or
    sequencia is null)        
                                                    and t.COD_DEV not in (
            
    select hc.cod_dev
            
    from historicos_clientes hc (nolock)
            
    inner join filtros.dbo.ocor_itau oi (nolock) on oi.Cod_ocor = hc.COD_OCOR
            
    where oi.Grupo_ocor in ('acionamento','Acordos vista','Acordos parc')
            
    and (hc.data_cad) >= getdate ()-1)    
            
    and t.COD_DEV not in (
            
    select hc.cod_dev
            
    from historicos_clientes hc (nolock)
            
    inner join filtros.dbo.ocor_itau oi (nolock) on oi.Cod_ocor = hc.COD_OCOR
            
    where oi.Grupo_ocor in ('CPC')
            
    and DATA_CAD between GETDATE () -45 and GETDATE () 
            
    )    
            
    and t.cod_dev not in (
            
    select distinct cod_dev
            
    from filtros.dbo.tb_virtual_itau
            
    where  MONTH(CONVERT(DATETIME, datapagamento, 103))  > = month (getdate ())
            
    )
     
            
    and t.COD_DEV not in (
            
    select hc.cod_dev
            
    from historicos_clientes hc (nolock)
            
    inner join filtros.dbo.ocor_itau oi (nolock) on oi.Cod_ocor = hc.COD_OCOR
            
    where oi.Grupo_ocor in ('Acordos vista','Acordos parc')
            
    and hc.DT_AGEN_HIST > = GETDATE ()
            
    )
                                                    )
    AND ( T.COD_CRED = 79 )

    segunda-feira, 14 de julho de 2014 13:56

Respostas

  • Esse tipo de analise é dificil olhando somente o código, por mais que tenha pontos de melhoria, não é possivel dizer o quanto esses pontos estão afetando a execução sem ver o plano de execução.

    Se você conseguir salvar o plano de execução e compartilha-lo, é melhor para a analise.

    Hoje em dia, outro ponto importante pra se listar é se o servidor é uma maquina fisica ou maquina virtual, pois existem pontos importantes que influênciam na analise.


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    terça-feira, 15 de julho de 2014 01:54

Todas as Respostas

  • Boa tarde,

    Ela funcionava normalmente e do nada parou? você mudou alguma coisa ou fez alguma atualização?

    Att,


    Ricardo Cortes Microsoft Contingent Staff

    Esse contedo e fornecido sem garantias de qualquer tipo, seja expressa ou implicita.

    MSDN Community Support

    segunda-feira, 14 de julho de 2014 18:45
  • Estar em quase todas as etapas igual a zero não quer dizer nada.

    Há table scan ou índice scan ???

    segunda-feira, 14 de julho de 2014 19:33
  • Esse tipo de analise é dificil olhando somente o código, por mais que tenha pontos de melhoria, não é possivel dizer o quanto esses pontos estão afetando a execução sem ver o plano de execução.

    Se você conseguir salvar o plano de execução e compartilha-lo, é melhor para a analise.

    Hoje em dia, outro ponto importante pra se listar é se o servidor é uma maquina fisica ou maquina virtual, pois existem pontos importantes que influênciam na analise.


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    terça-feira, 15 de julho de 2014 01:54
  • thenriquelina,

    Durante estas 18 horas de processamento, você chegou a utilizar por exemplo o SQL Server Profiler, Activity Monitor ou um Trace File para Monitorar o que estava sendo processado?

    Analisando de forma superficial a sua query, identifiquei que existem diversos NoLock declarados, saiba que isso pode ser uma faca de duas pontas, onde ele te ajuda a evitar bloqueios de dados, mas por outro lado poderá oferecer possíveis leituras sujas, e principalmente obrigar o SQL Server a mudar o seu nível de isolamento de dados em diversas casos poderá gerar concorrência de processamento.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 16 de julho de 2014 18:19