Usuário com melhor resposta
Plano de Execução com Custo 0%

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 )
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.
- Editado Alex Rosa [MSFT]Microsoft employee terça-feira, 15 de julho de 2014 01:54
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 14:56
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:37
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
-
-
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.
- Editado Alex Rosa [MSFT]Microsoft employee terça-feira, 15 de julho de 2014 01:54
- Sugerido como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 14:56
- Marcado como Resposta Ricardo Barbosa Cortes terça-feira, 15 de julho de 2014 19:37
-
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]