Сертификация на совместимость

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure

Сертификация на совместимость позволяет компаниям обновлять и модернизировать базу данных SQL Server в локальной среде, облаке и пограничной зоне, устраняя риски, связанные с совместимостью приложений.

Одно и то же ядро СУБД лежит в основе как SQL Server, так и Базы данных SQL Azure (включая Управляемый экземпляр SQL Azure). Это совместно используемое ядро СУБД означает, что пользовательскую базу данных можно легко перемещать между локальным SQL Server и Базой данных SQL Azure. При этом код приложения, выполняемый в базе данных как Transact-SQL, продолжит работать так же, как в исходной системе.

Для каждого нового выпуска SQL Server уровень совместимости по умолчанию устанавливается в зависимости от версии Компонент Database Engine. Однако уровень совместимости предыдущих версий сохраняется, чтобы совместимость существующих приложений не терялась. Таблицу совместимости можно просмотреть здесь. Поэтому если приложение было сертифицировано для работы с определенной версией SQL Server, оно сертифицировано для работы на уровне совместимости по умолчанию этой версии.

Например, в SQL Server 2016 (13.x); по умолчанию использовался уровень совместимости базы данных 130. Так как уровни совместимости определяют функциональное поведение и способ оптимизации запросов Transact-SQL, база данных, сертифицированная для работы в SQL Server 2016 (13.x), была неявно сертифицирована на уровне совместимости базы данных 130. Эта база данных может работать "как есть" в более поздней версии SQL Server (например, SQL Server 2019 (15.x)) и в База данных SQL Azure при условии, что сохраняется уровень совместимости базы данных 130.

Это фундаментальный принцип модели непрерывной интеграции Microsoft База данных SQL Azure. Компонент Database Engine постоянно улучшается и обновляется в Azure, но так как для существующих баз данных сохраняется текущий уровень совместимости, они продолжают работать, как было задумано, даже после обновления базового Компонент Database Engine.

Этот же принцип используют SharePoint Server 2016 и SharePoint Server 2019 для сертификации на SQL Server и Управляемый экземпляр SQL Azure, что позволяет развертывать любые Компонент SQL Server Database Engine, которые могут использовать поддерживаемые уровни совместимости баз данных для этих версий SharePoint Server. Дополнительные сведения см. в статьях Требования к оборудованию и программному обеспечению для SharePoint Server 2016и Требования к оборудованию и программному обеспечению для SharePoint Server 2019.

Управление рисками при обновлении с помощью сертификации на совместимость

Сертификация на совместимость — эффективный подход к модернизации базы данных. Выполняя сертификацию на уровне совместимости, разработчики устанавливают технические требования для поддержки приложения в SQL Server и База данных SQL Azure, но отделяют жизненный цикл приложения от жизненного цикла платформы баз данных. Это позволяет компаниям обновлять ядро СУБД SQL Server по мере необходимости в соответствии с политиками жизненного цикла, используя новые улучшения масштабируемости и производительности, которые не зависят от кода, а подключаемые приложения поддерживают свое функциональное состояние посредством обновлений.

Возможность негативного воздействия на функциональность и производительность — основной фактор риска при любом обновлении. Сертификация на совместимость позволяет уверенно управлять такими рисками.

  • Что касается поведения Transact-SQL, любое изменение означает, что приложение должно пройти повторную сертификацию для подтверждения правильности его работы. Однако уровень совместимости базы данных обеспечивает обратную совместимость с более ранними версиями SQL Server только для указанной базы данных, а не всего сервера. Сохранение уровня совместимости базы данных гарантирует, что существующие запросы приложения будут работать одинаково до и после обновления ядра СУБД. Дополнительные сведения о поведении Transact-SQL и уровнях совместимости см. в разделе Использование уровней совместимости для обеспечения обратной совместимости.

  • Если говорить о производительности, то, поскольку с каждой новой версией в оптимизатор запросов вводятся усовершенствования, в разных версиях Компонент Database Engine можно было бы ожидать различий в планах запросов. Различия в планах запросов при обновлении обычно приводят к возникновению риска, если некоторые изменения могут негативно сказаться на определенном запросе или рабочей нагрузке. В свою очередь, именно это обычно приводит к необходимости повторной сертификации приложений, что может задерживать обновление и создавать проблемы с жизненным циклом и поддержкой.

    Именно в целях устранения рисков, возникающих при обновлении, улучшения оптимизатора запросов ограничиваются уровнем совместимости по умолчанию нового выпуска (другими словами, самым высоким уровнем совместимости, доступным для новой версии). Сертификация на совместимость включает в себя защиту формы плана запроса: представление о том, что сохранение уровня совместимости базы данных сразу после обновления ядра СУБД означает использование той же модели оптимизации запросов в новой версии, что и до обновления, а форма плана запроса не должна измениться.

    Дополнительные сведения см. в разделе Для чего нужна форма плана запроса?.

Дополнительные сведения об уровнях совместимости см. в разделе Использование уровня совместимости для обеспечения обратной совместимости.

Важно!

Для существующего приложения, которое уже сертифицировано для заданного уровня совместимости, обновите Компонент SQL Server Database Engine и сохраните предыдущий уровень совместимости базы данных. В этом сценарии нет необходимости в повторной сертификации приложения. Дополнительные сведения см. в разделе Уровни совместимости и обновления ядра СУБД далее в этой статье.

Если вы разрабатываете новое приложение, или существующему приложению требуется использовать новые возможности, такие как интеллектуальная обработка запросов, или какие-либо новые инструкции Transact-SQL, запланируйте обновление уровня совместимости до последнего доступного в SQL Server и проведите повторную сертификацию приложения для работы на этом уровне. Дополнительные сведения о повышении уровня совместимости базы данных см. в разделе Рекомендации по обновлению уровня совместимости базы данных.

Для чего нужна форма плана запроса?

Форма плана запроса относится к визуальному представлению различных операторов, составляющих план запроса. Сюда входят такие операторы, как поиск, сканирование, соединение и сортировка, а также связи между ними, указывающие поток данных и порядок операций, которые должны быть выполнены для получения необходимого результирующего набора. Форма плана запроса определяется оптимизатором запросов.

Чтобы сохранить предсказуемую производительность запросов во время обновления, необходимо использовать одну и ту же форму плана запроса. Это можно сделать, не изменяя уровень совместимости базы данных сразу после обновления несмотря на разные версии базового экземпляра Компонент Database Engine. Если в экосистеме выполнения запросов больше ничего не изменилось (например, доступные ресурсы или механизм распространения данных в базовых данных не претерпели значительных изменений), производительность запроса должна остаться прежней.

Однако сохранение формы плана запроса — это не единственный момент, который может повлиять на производительность после обновления. При перемещении базы данных в более новый экземпляр Компонент Database Engine и внесении изменений в среду могут появиться факторы, которые немедленно затронут производительность запроса, даже если у плана запроса будет одна форма в разных версиях. Эти изменения могут включать в себя новый Компонент Database Engine с большим или меньшим объемом доступных ресурсов памяти и ЦП, изменения параметров конфигурации сервера или базы данных, а также изменения механизма распространения данных, влияющие на создание плана запроса. Поэтому важно понимать, что поддержка уровня совместимости базы данных обеспечивает защиту от изменений в форме плана запроса, но не защищает от других факторов среды (некоторые из них являются инициированными пользователем изменениями), влияющих на производительность запросов.

Дополнительные сведения см. в статье Руководство по архитектуре обработки запросов.

Преимущества сертификации на совместимость

У сертификации базы данных как подхода, основанного на совместимости, а не на конкретных версиях, есть ряд прямых преимуществ.

  • Отделение сертификации приложения от платформы. Так как ядро СУБД является общим, приложениям, которым нужно просто выполнять запросы Transact-SQL, не требуется поддерживать отдельные процессы сертификации для Azure и локальной среды.
  • Снижение рисков при обновлении вследствие того, что во время модернизации платформы баз данных циклы обновления на уровне приложений и на уровне платформы баз данных можно разделить, чтобы сократить перерывы в работе и улучшить управление изменениями.
  • Обновление без изменения кода. Обновление до новой версии SQL Server или Базы данных SQL Azure можно выполнить без изменения кода, сохранив тот же уровень совместимости, что и у исходной системы. Кроме того, не нужно будет выполнять немедленную повторную сертификацию до тех пор, пока приложению не потребуется использовать улучшения, которые доступны только на более высоком уровне совместимости базы данных.
  • Улучшайте управляемость и масштабируемость без внесения изменений в приложения за счет использования усовершенствований, не ограниченных определенным уровнем совместимости базы данных. В SQL Server к ним относятся, например:

Для новых баз данных по-прежнему задается уровень совместимости по умолчанию версии Компонент Database Engine. Но когда база данных восстанавливается или подключается из любой более ранней версии SQL Server к новой версии SQL Server или Базы данных SQL Azure, эта база данных сохраняет свой существующий уровень совместимости.

Важно!

Перед переносом базы данных в новую версию SQL Server или База данных SQL Azure убедитесь в том, что уровень совместимости базы данных по-прежнему поддерживается. Таблицу поддержки уровня совместимости базы данных можно просмотреть здесь.

При обновлении базы данных с уровнем совместимости ниже допустимого (например, уровнем 90, который был уровнем по умолчанию в SQL Server 2005 (9.x)) устанавливается минимальный допустимый уровень совместимости (100).

Чтобы определить текущий уровень совместимости, запросите столбец compatibility_level в представлении sys.databases.

Уровни совместимости и обновления ядра СУБД

Чтобы обновить Компонент Database Engine до последней версии с сохранением уровня совместимости базы данных, существовавшего до обновления, и ее состояния поддержки, рекомендуется выполнить статическую функциональную проверку контактной зоны кода приложения в базе данных (объекты программирования, включая хранимые процедуры, функции, триггеры и пр.) и в приложении (используя трассировку рабочей нагрузки для записи кода, отправляемого приложением).

Это легко сделать, использовав Помощник по миграции данных (Майкрософт) (DMA). Отсутствие в выходных данных DMA ошибок, связанных с отсутствием или несовместимостью функциональных возможностей, позволит избежать снижения функциональности приложения в новой конечной версии. Если требуется внести изменения, чтобы гарантировать, работоспособность базы данных в новой версии, DMA позволит точно определить, где требуется внести изменения, и какие обходные решения доступны. Дополнительные сведения см. в разделе Общие сведения о Помощнике по миграции данных.

Совет

Эта функциональная проверка особенно важна при переводе базы данных с устаревшей версии (такой как SQL Server 2008 R2 или SQL Server 2012 (11.x)) на новую версию SQL Server или Базы данных SQL Azure, так как код приложения может использовать неподдерживаемую версию Transact-SQL, не защищенную уровнем совместимости базы данных. Но при переходе с более новой версии (такой как SQL Server 2016 (13.x)) на SQL Server 2019 (15.x) или Базу данных SQL Azure, нет причин волноваться о неподдерживаемой версии Transact-SQL. Дополнительные сведения о неподдерживаемых версиях Transact-SQL см. в разделе Использование уровня совместимости для обеспечения обратной совместимости.

Примечание

DMA поддерживает уровень совместимости базы данных 100 и выше. SQL Server 2005 (9.x) как исходная версия не поддерживается.

Важно!

Microsoft рекомендует проводить минимальное необходимое тестирование для проверки успешности обновления с сохранением прежнего уровня совместимости базы данных. Вам следует определить, что является минимальным необходимым тестированием, с учетом особенностей вашего приложения и сценария.

Важно!

Microsoft обеспечивает защиту формы плана запроса в указанных ниже случаях.

  • Новая (конечная) версия SQL Server работает на оборудовании, сопоставимом с оборудованием, на котором работала предыдущая (исходная) версия SQL Server.
  • Один и тот же поддерживаемый уровень совместимости базы данных используется как в конечной версии SQL Server, так и в исходной версии SQL Server.
  • Одна база данных и рабочая нагрузка используются в целевой системе SQL Server и в исходной системе SQL Server.

Любая регрессия формы плана запроса (по сравнению с исходной версией SQL Server) в описанных выше ситуациях требует принятия мер. Обратитесь в службу поддержки клиентов Майкрософт.

См. также раздел