T-SQL - OPTION (FAST x) и флаг трассировки 8722

9

Я долго искал и до сих пор не нашел ответа на свою проблему.

Наш Dynamics AX генерирует запросы с опцией подсказки запроса (FAST x), которая иногда вынуждает использовать неверный план выполнения. Разработчики говорят, что это по умолчанию, и его трудно изменить (возможно, должно быть исправлено во всех формах).

Так что я нашел способ переопределить эти подсказки, используя флаги трассировки. Я обнаружил прекрасный флаг трассировки 8722, который, как утверждается, заставляет SQL Server игнорировать некоторые подсказки запроса, особенно те, которые содержатся в предложении OPTION.

Тем не менее, это не работает в моем случае. Я также попытался включить флаг трассировки 8602 (отключить подсказки индекса), но мой запрос все еще выполняется с подсказкой FAST x (это намного медленнее, чем когда я фактически удаляю предложение OPTION).

Я также попытался очистить кэш плана, но безрезультатно.

Любые идеи? Я что-то пропустил?

PS Я включил флаги трассировки глобально, это выпуск SQL Server 2012 для разработчиков

Нельсон 2.0
источник
1
Как вы включили флаги трассировки? Вы включили его через запуск сервера или с помощью dbcc traceon? dbcc traceon - это флаг трассировки для каждого соединения, поэтому включение его в одном клиентском соединении не влияет на соединения с другим сервером. Чтобы включить его для всего сервера, вам нужно добавить -T <traceflagnumber> в командную строку запуска. Я полагаю, что вы можете использовать dbcc traceon (flag1, flag2, ..., - 1), чтобы применить его на всем сервере, но я никогда не пробовал.
Майк
Привет, Майк, я включил флаги трассировки глобально, используя DBCC TRACEON (8722, -1), а затем проверил состояние с помощью DBCC TRACESTATUS. Возможно, флаг трассировки больше официально не поддерживается, или мне действительно нужно поместить его в параметр запуска и перезапустить службу, или он является предметом CU3 (я использую RTM 2012 SP2).

Ответы:

10

Насколько я знаю, флаги трассировки 8722, 8755 и 8602 никогда официально не документировались. В последний раз я помню, как они были эффективными, в SQL Server 2000, поэтому неудивительно, что они игнорируются в SQL Server 2012.

Для определенных шаблонов запросов часто можно удалить FAST nподсказку с помощью направляющих плана. Тем не менее, лучшим решением будет заставить разработчиков AX исправить это на стороне приложения.

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