ВВЕДЕНИЕ
В версиях Microsoft SQL Server, более поздних, чем SQL Server 2000 с пакетом обновления 3 (SP3), предоставлялось большинство исправлений для оптимизатора запросов в отключенном по умолчанию состоянии, чтобы существующие производственные клиенты не видели ожидаемых изменений планов, которые могут привести к снижению производительности. Сначала каждое исправление доставлялось под отдельным флагом трассировки. Позже эта практика была изменена таким образом, чтобы большинство флагов были объединены под одним флагом трассировки (4199). Эта новая методика была внедрена в нескольких версиях, начиная со следующих обновлений:
- SQL Server 2005 с пакетом обновления 3 (SP3) с накопительным пакетом обновления 6
- Накопительный пакет обновления для SQL Server 2008 с пакетом обновления 1 (SP1) 7
- SQL Server 2008 R2 (RTM)
Флаг трассировки 4199 использовался для сбора исправлений, которые должны были стать включенными по умолчанию в будущем выпуске, в то время как другие флаги трассировки использовались для ситуаций, в которых исправление не должно было стать включенным по умолчанию в текущей форме. Начиная с SQL Server 2016 RTM, параметр COMPATIBILITY_LEVEL базы данных будет включать исправления, связанные с флагом трассировки 4199, по умолчанию. В этой статье описывается механика и политика предоставления исправлений, влияющих на план, для SQL Server 2016 и более поздних версий.
Дополнительные сведения
В SQL Server 2016 г. исправления флага трассировки 4199, внесенные в предыдущие выпуски SQL Server, будут включены в COMPATIBILITY_LEVEL базы данных 130 без включения флага трассировки 4199. Флаг трассировки 4199 будет использоваться для выпуска любых будущих исправлений SQL Server 2016 для баз данных с использованием уровня совместимости 130. Так как флаг трассировки 4199 рекомендуется только для пользователей, сталкивающихся с определенными проблемами производительности, пользователям рекомендуется удалить флаг трассировки 4199 после переноса баз данных на последний уровень совместимости, так как флаг трассировки 4199 будет повторно использоваться для будущих исправлений, которые могут не применяться к приложению и вызвать непредвиденные изменения производительности плана в рабочей системе. Это означает, что для каждого уровня совместимости, поддерживаемого в данном выпуске продукта, включаются различные исправления флага трассировки 4199. Последний уровень совместимости уже включает все предыдущие исправления под флагом трассировки 4199. Это означает, что при обновлении базы данных до последнего уровня совместимости и удалении флага трассировки 4199 по-прежнему будут доступны все исправления, которые использовались рабочей нагрузкой до обновления базы данных, но не новые исправления. Если в будущем у клиентов возникнут проблемы с производительностью запросов, поэкспериментируйте с включением параметра QUERY_OPTIMIZER_HOTFIXES области базы данных или запроса подсказки ENABLE_QUERY_OPTIMIZER_HOTFIXES в тестовой среде, чтобы определить, устранены ли проблемы. См. документацию о QUERY_OPTIMIZER_HOTFIXES.
Примечание По умолчанию базы данных, созданные в SQL Server 2016, используют уровень совместимости 130 и уже включают новую логику оптимизатора.
Основное преимущество этой модели заключается в том, что она снижает риск для производственных систем в процессе обновления. При таком подходе установка новой основной версии SQL Server отделена от автоматического включения всех новых изменений обработчика запросов. Так как при обновлении основной версии изменяется формат файлов, а процедура отмены необратима, рекомендуется использовать параметр COMPATIBILITY_LEVEL, так как он позволяет быстро перейти к более ранней версии при обнаружении непредвиденных проблем с производительностью плана во время обновления. Если клиент обнаруживает непредвиденное изменение плана, которое блокирует обновление приложения, он может облегчить ситуацию, применив соответствующую подсказку плана, используя хранилище запросов для принудительного применения предыдущего плана, или может облегчить ситуацию, обратившись в службу поддержки пользователей Майкрософт за помощью в решении проблемы и предоставлении временного или исправления. Когда все проблемы будут решены, обновление можно продолжить. Клиентам следует интегрировать эту возможность в планирование обновления SQL Server 2016.
В следующей таблице описывается модель работы флага трассировки 4199, начиная с SQL Server 2016.
| Параметр | Уровень совместимости SQL | Флаг трассировки 4199 | Исправления оптимизатора до SQL Server 2016 RTM | Исправления оптимизатора после SQL Server 2016 RTM |
|---|---|---|---|---|
| 1. | 120 | Выкл. | Disabled | Disabled |
| 2. | 120 | Вкл. | Включено | Disabled |
| 3. | 130 | Выкл. | Поддерживается уровнем совместимости | Disabled |
| 4. | 130 | Вкл. | Поддерживается уровнем совместимости | Поддерживается уровнем совместимости |
Примечание. Параметру No 3 рекомендуется использовать для пользователей, которые обновляются до SQL Server 2016.
Что касается основных выпусков после SQL Server 2016, корпорация Майкрософт планирует и дальше использовать эту модель обслуживания для исправлений оптимизатора. По умолчанию (или для каждого выпуска) исправления флага трассировки 4199 из предыдущего выпуска будут включены на следующем уровне совместимости. Это означает, что для пользователей после перехода на последний уровень совместимости будет рекомендовано отключение флага трассировки 4199. Более поздние исправления будут использовать флаг трассировки 4199 для включения исправлений для пользователей, которым необходимо включить эти конкретные исправления в приложении. Пользователям рекомендуется отключать флаг трассировки 4199 после обновления приложения до последнего уровня совместимости, чтобы избежать непредвиденного включения непредвиденных изменений оптимизатора в будущем. Что обновление до последнего уровня совместимости и удаление флага трассировки 4199 по-прежнему включает все исправления, которые рабочая нагрузка использовала до обновления, но не новые исправления.
Примечание Хотя многие исправления оптимизатора включены под флагом трассировки 4199, некоторые используют другие флаги трассировки. Флаг трассировки 4199: исторически охваченные флаги трассировки, которые широко применимы и, вероятно, станут включены по умолчанию в будущем выпуске. Альтернативные флаги трассировки используются в исправлениях, условия которых являются весьма специфическими для лишь немногих пользователей, когда исправление может привести к снижению производительности в других приложениях или когда внутренние функции могут быть изменены до того, как они станут доступными для всех. Корпорация Майкрософт продолжит использовать другие флаги трассировки, если это необходимо для обслуживания продукта.
Примечание В этой статье рассматривается модель выпуска исправлений с флагом трассировки 4199 на последнем уровне совместимости последнего продукта. (На момент публикации это SQL Server 2016.) Исправления оптимизатора могут выпускаться на более ранних рыночных версиях SQL Server или на более низких уровнях совместимости SQL Server 2016 (120 или более ранних). Корпорация Майкрософт оценивает каждый вариант и определяет, следует ли использовать флаг трассировки 4199 или другой флаг трассировки. Поскольку изменения, не относящиеся к исправлениям, также включаются при переходе на более поздний уровень совместимости, нет конкретного обещания, что во время обновления (с флагом трассировки 4199 или без него) изменения плана не произойдут. Клиентам всегда следует тщательно тестировать изменения уровня совместимости для производственных приложений и использовать технологии смягчения последствий, такие как хранилище запросов, при возникновении проблем с производительностью, связанных с выбором плана.
Для справки, следующие флаги трассировки использовались для исправлений обработчика запросов до введения флага трассировки 4199:
4101, 4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4115, 4116, 4117, 4119, 4120, 4121, 4122, 4124, 4125, 4126, 4127, 4128, 4129, 4131, 4133, 4135.
SQL Server 2012 и более поздние версии
Флаг трассировки 4199 включен в версии выпуска SQL Server 2012 и более поздних версий.
Включение флага трассировки 4199
Вы можете включить флаг трассировки 4199 при запуске или в пользовательском сеансе. Этот флаг трассировки действует либо на глобальном уровне, либо на уровне сеанса. Чтобы включить флаг трассировки 4199, используйте команду DBCC TRACEON или –T 4199 в качестве параметра запуска.
Если используется DBCC TRACEON\TRACEOFF, это не создает заново кэшированный план для хранимых процедур. Планы могли находиться в кэше, которые были созданы без флага трассировки.
Подробные сведения о включении и отключении флагов трассировки, а также пояснениях к глобальным флагам трассировки и флагам трассировки на уровне сеанса можно найти в следующих разделах книг по SQL Server в Интернете:
- DBCC TRACEON (Transact-SQL)
- Настройка параметров запуска сервера (диспетчер конфигурации SQL Server)
Ссылки
Дополнительные сведения о схеме именования для обновлений SQL Server см. в следующей статье базы знаний Майкрософт:
822499
Новая схема именования пакетов обновления программного обеспечения Microsoft SQL Server
Дополнительные сведения о терминологии обновления программного обеспечения см. в следующей статье базы знаний Майкрософт:
824684
Стандартные термины, используемые при описании обновлений программного обеспечения Майкрософт