Функция Force Plan плана запросов не работает

12

Похоже, что план плана Query Store Force не обеспечивает выполнение плана.

Я знаю о Query Store - принудительное не всегда означает принудительное ; тем не менее, мой план может измениться незначительно, но оптимизатор запросов может продолжать выбирать неверные индексы, выбор циклов и т. д.

По сути: это не соответствует моему вынужденному выбору плана. Я заставил много планов, и это просто не работает .

  1. Есть 0 отсчетов или причин, когда я смотрю sys.query_store_plan force_failure_count.
  2. Расширенное событие query_store_plan_forcing_failedничего не дает. 0 События.

Например, план, который был вынужден 20.09. Только в 1 сборнике использовался принудительный план.

Планы для запроса

Планы сильно отличаются друг от друга: один использует соединение Hash Match с INDEX 1, другой использует Loop Join с INDEX 2.

Разные планы

Версия: Microsoft SQL Server 2016 (SP1-GDR) (KB3210089) - 13.0.4202.2 (X64)

Что мне здесь не хватает?

Янис Вейнбергс
источник

Ответы:

16

Из sys.query_store_plan (Transact-SQL) (выделение добавлено)

План форсирования ограничений

В Query Store есть механизм, который заставляет Query Optimizer использовать определенный план выполнения. Однако существуют некоторые ограничения, которые могут помешать выполнению плана .

Во-первых, если план содержит следующие конструкции:

  • Вставить массовое заявление.
  • Ссылка на внешнюю таблицу
  • Распределенный запрос или полнотекстовые операции
  • Использование глобальных запросов
  • курсоры
  • Неверная спецификация соединения звезды

Вы используете курсор.


Вместо этого вы можете использовать план курсора с помощью направляющей плана. См. Использование подсказки запроса USE PLAN в запросах с курсорами .

И да, я согласен, что текущая ситуация не делает для лучшего пользовательского опыта. Я ожидал бы, что попытка форсировать план для чего-то, что не может (в настоящее время) быть вызвано, вызовет ошибку или предупреждение, или зарегистрирует что-то. Вы можете войти в раздел обратной связи, чтобы запросить улучшение в этой области.


Начиная с SQL 2019 CTP 2.3 поддерживается форсированный план выполнения запросов для Fast Forward и статических курсоров.

Query Store теперь поддерживает возможность принудительного выполнения планов выполнения запросов для ускоренной перемотки вперед и статических курсоров T-SQL и API. Форсирование теперь поддерживается через sp_query_store_force_planили через отчеты хранилища запросов SQL Server Management Studio.

Пол Уайт 9
источник