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


9

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

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

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

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

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

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

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


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 исправить это на стороне приложения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.