Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 QUERY_OPTIMIZER_HOTFIXES = ON  [new]
QO
Guest
В документации от Microsoft есть опция для БД QUERY_OPTIMIZER_HOTFIXES
https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-scoped-configuration-transact-sql

В частности там сказано:
автор
QUERY_OPTIMIZER_HOTFIXES = { ON | OFF | PRIMARY }
Enables or disables query optimization hotfixes regardless of the compatibility level of the database. The default is OFF, which disables query optimization hotfixes that were released after the highest available compatibility level was introduced for a specific version (post-RTM). Setting this to ON is equivalent to enabling Trace Flag 4199.


А как понять какие именно hotfix включаем при включении этой опции на БД?

Если почитать справку по Trace Flag 4199, то там следующее:
https://docs.microsoft.com/ru-ru/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql
(см. вложение)

Уровень совместимости базы данных = 140
TF 4199 = включен\выключен
Изменяет QO из предыдущих уровней совместимости базы данных = включено\включено
QO изменения для текущей версии RTM post = включено\выключено


Т.е. я правильно понимаю, что если у меня версия сервера например MS SQL 2016 SP1 CU3, то с выключенным флагом hotfix-ов нет (версия соответствует RTM), а если я её включу, то "включатся" всеп hotfix-ы для QO для
CU1 (https://support.microsoft.com/en-us/help/3208177),
CU2 (https://support.microsoft.com/en-us/help/4013106),
CU3 (https://support.microsoft.com/en-us/help/4019916)?
1 ноя 17, 15:39    [20919286]     Ответить | Цитировать Сообщить модератору
 Re: QUERY_OPTIMIZER_HOTFIXES = ON  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
QO,

Смысл такой. Изменения в оптимизаторе, контролируются уровнем совместимости и флагом/хинтом.
Если вы, переходите на новую версию, либо устанавливаете CU или SP, то никаких изменений оптимизатора заметить не должны.

Далее два варианта:
1) Вы обновляетесь CU или SP - нового уровня совместимости нет. Если вы хотите, чтобы применялись фиксы оптимизатора этого CU/SP и планы возможно поменялись - вы включаете этот хинт/трейс флаг
2) Вы обновляетесь до новой версии RTM - появляется новый уровень совместимости. Если вы хотите чтобы применялись все фиксы до того как был сделан RTM (и новый уровень совместимости соответственно), то просто ставите последний уровень совместимости.
И далее по тому же принципу.

Например, выпустили, 2016 RTM, уровень совместимости 130. Позже обнаружили баги в QO.
Пофиксили их в последующих апдейтах 2016. Но чтобы эти фиксы не повлияли на уже существующие планы, фиксы QO в CU 1/2/3 не включены по-умолчанию, а включаются отдельно флагом или подсказкой.
Обновились до 2017. Уровень совместимости остался тот же (130 - 2106), фиксы также не включены. Далее повысили уровень совместимости - включили все фиксы 2016 RTM - 2017 RTM. Прошло время и вышел CU 1 для 2017 RTM, если хотите включить последние фиксы - включайте флаг или настройку.

Надеюсь понятно объяснил.
1 ноя 17, 20:41    [20920180]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить