Consultas sem plano suficiente encontrado

20

Eu tenho um banco de dados do SQL Server 2012. Notei o valor de Reason for early termination of statement optimizationpara algumas consultas e tudo deu Good Enough Plan Found. Agora minhas perguntas são:

  1. Quais são todos os tipos possíveis de "Motivo para o término antecipado da otimização de instruções". Eu procurei por isso no msdn, mas não obtive uma lista completa de valores.
  2. Existe um DMV ou evento estendido para listar todas as consultas para as quais a otimização foi encerrada devido a outros motivos que não o plano suficiente encontrado? Eu me referi a seguir dois artigos que não listam a lista completa de possibilidades. [Além disso, eles me dão resultados diferentes no meu banco de dados].

insira a descrição da imagem aqui

LCJ
fonte

Respostas:

20
  • Limite de memória excedido

    O otimizador foi forçado a parar de procurar melhores alternativas de planejamento devido à pressão da memória. O motivo disso deve ser investigado e corrigido e, em seguida, a compilação de consultas tentada novamente. O plano retornado pode muito bem não ser aquele que o otimizador selecionaria se a condição de pouca memória não existisse.

  • Tempo esgotado

    Esse motivo é muito mal compreendido .

    O otimizador de consultas visa encontrar um plano razoável rapidamente . Não realiza uma pesquisa exaustiva para encontrar o melhor plano possível. Por design, evita gastar mais tempo em otimização do que o necessário. Um desses recursos que trabalha para garantir isso é o 'tempo limite' (não uma medida de tempo).

    O otimizador define um 'orçamento de exploração' com base na complexidade da consulta lógica, nas estimativas de cardinalidade e no custo estimado do plano mais barato encontrado até o momento (se houver). Consultas mais complexas com cardinalidade mais alta recebem um orçamento mais alto.

    Se esse orçamento for excedido durante uma de suas fases de pesquisa, a fase será encerrada. Isso faz parte do design e da operação normal do otimizador. As consultas que precisam de mais esforço do otimizador são obtidas; aqueles que não, não.

    Pense em 'Time Out' como 'Plano suficiente encontrado'.

  • Bom plano suficiente encontrado

    Isso significa exatamente o mesmo que um motivo em branco. É simplesmente uma peculiaridade histórica que os planos com um custo abaixo de 0,909090 ... (1 / 1.1) são rotulados dessa maneira. Nada para mais cedo ou é tratado de maneira especial ou diferente dentro do código do otimizador quando esse motivo aparecer.

Além do limite de memória excedido, nenhum dos "motivos de finalização antecipada" significa muito (se é que existe alguma coisa) para ajuste de consulta ou análise de desempenho. Eu geralmente os ignoro.

Conselhos

Direcione os esforços de ajuste de consultas com base em métricas de desempenho real (tempo decorrido, uso de CPU / memória, ... o que for importante no contexto). Se uma consulta for muito lenta para o objetivo a que se destina, gaste tempo tornando-a mais rápida. Avalie o desempenho real, compare-o com a linha de base e o histórico e direcione o esforço de ajuste às variações importantes.

Armazene dados garantidos e limpos em um esquema relacional adequado, com estatísticas e índices úteis e consultas bem escritas e amigáveis ​​ao otimizador.

Paul White diz que a GoFundMonica
fonte
10

Se você acessar http://schemas.microsoft.com/sqlserver/2004/07/showplan/showplanxml.xsd (que é o link que você verá se abrir um plano de execução como xml), verá o três razões listadas, quais são:

  • Tempo esgotado
  • MemoryLimitExceeded
  • GoodEnoughPlanFound

Os artigos mencionados parecem adequados para encontrar esses eventos. Você está tendo um problema específico? A única coisa a ter em mente é que essas DMVs não capturam todos os comandos SQL já executados no servidor e são redefinidas quando o servidor é reiniciado. Você pode capturar o showplan xml com Eventos Estendidos e consultá-lo, mas isso me parece um exagero.

Também não me preocuparia muito com o GoodEnoughPlanFound, parece que o otimizador está fazendo seu trabalho (de encontrar um bom plano rapidamente) muito bem.

HTH

wBob
fonte