O recurso Plano de Força do Query Store não funciona

12

O recurso do plano Query Store Force parece não estar aplicando o plano.

Estou ciente do Query Store - Forçado nem sempre significa Forçado ; no entanto, meu plano pode não sofrer alterações insignificantes, mas o otimizador de consultas pode continuar escolhendo índices incorretos, opções de loop etc.

Basicamente: não respeita minha escolha de plano forçado. Eu forcei muitos planos e simplesmente não funciona .

  1. Existem 0 contagens ou razões de falhas quando eu olho sys.query_store_plan force_failure_count.
  2. Evento estendido query_store_plan_forcing_failednão produz nada. 0 Eventos.

Por exemplo, um plano que foi forçado em 20.09. Apenas uma compilação utilizou o plano forçado.

Planos para consulta

Os planos diferem bastante, um usando a junção de Hash Match com o INDEX 1 e o outro usando a junção de loop com o INDEX 2.

Planos diferentes

Versão: Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64)

O que estou perdendo aqui?

Janis Veinbergs
fonte

Respostas:

16

De sys.query_store_plan (Transact-SQL) (ênfase adicionada)

Planejar limitações de forçamento

O Query Store possui um mecanismo para impor o Query Optimizer a usar determinado plano de execução. No entanto, existem algumas limitações que podem impedir a execução de um plano .

Primeiro, se o plano contiver as seguintes construções:

  • Inserir declaração em massa.
  • Referência a uma tabela externa
  • Consulta distribuída ou operações de texto completo
  • Uso de consultas globais
  • Cursores
  • Especificação de associação em estrela inválida

Você está usando um cursor.


Em geral, você pode forçar um plano de cursor com uma guia de plano. Consulte Usando a dica de consulta USE PLAN em consultas com cursores .

E sim, concordo que a situação atual não contribui para a melhor experiência do usuário. Eu esperaria que a tentativa de forçar um plano para algo que não possa (atualmente) ser forçado levaria a um erro ou aviso ou registraria algo. Você pode registrar um item de Feedback para solicitar uma melhoria nessa área.


A partir do SQL 2019, o CTP 2.3 forçando o plano de execução de consultas para cursores Fast Forward e Static é suportado

O Query Store agora oferece suporte à capacidade de forçar planos de execução de consulta para cursores T-SQL e API avançados e estáticos. O forçamento agora é suportado por sp_query_store_force_planmeio ou através dos relatórios do SQL Server Management Studio Query Store.

Paul White 9
fonte