Поделиться через


Снижение производительности при обновлении уровня совместимости базы данных с 120 до 130

Эта статья поможет устранить проблему, возникающую при обновлении уровня совместимости базы данных с 120 до 130.

Исходная версия продукта: SQL Server 2016, SQL Server 2017 в Windows (все выпуски)
Исходный номер базы знаний: 3212023

Итоги

Рассмотрим следующий сценарий:

  • Пространственный запрос выполняется с помощью фильтра с функцией, например STIntersects в SQL Server 2016 или SQL Server 2017 в Windows.
  • Уровень совместимости базы данных — 120.
  • Запрос использует параллельный план выполнения.
  • Вы обновляете уровень совместимости базы данных до 130, а план выполнения изменился с параллельного на последовательный.

В этом сценарии происходит снижение производительности, если запрос возвращает большой результирующий набор.

Решение

Чтобы устранить эту проблему, попробуйте один из следующих методов:

  • Восстановление уровня совместимости базы данных до 120. При этом вы не сможете воспользоваться некоторыми функциями, доступными в SQL Server 2016 или SQL Server 2017 в Windows на уровне совместимости базы данных 130. Однако вы по-прежнему сможете реализовать множество улучшений, которые не привязаны к уровню совместимости базы данных, например, общее улучшение производительности операций запросов с пространственными типами данных.

    Список улучшений SQL Server 2016, требующих уровня совместимости базы данных 130, см. в разделе ALTER DATABASE (Transact-SQL).

  • Принудить план, созданный с уровнем совместимости базы данных 120, если он обеспечивает более высокую производительность. Этот план можно принудительно запустить с уровнем совместимости базы данных 130 с помощью USE PLAN указания запроса. Дополнительные сведения об использовании подсказок см. в разделе "Подсказки" (Transact-SQL) — запрос.

    Кроме того, используйте хранилище запросов для выявления и исправления определенных вариантов плана. Дополнительные сведения об использовании хранилище запросов для этой цели см. в хранилище запросов сценариях использования.

Дополнительная информация

Уровни совместимости базы данных SQL Server 120 и 130 используют различные подходы к оценке кратности предикатов, где скалярная определяемая пользователем функция или определенная функция T-SQL (например, STIntersects) сравнивается с константой.

Хотя модель затрат, используемая уровнем совместимости базы данных 130, повышает производительность для многих рабочих нагрузок по сравнению с уровнем 120, для некоторых запросов (в зависимости от используемых данных и функций) производительность планов запросов может на самом деле снизиться на уровне 130.

Применяется к

  • SQL Server 2017 on Windows (все выпуски)
  • SQL Server 2016 с пакетом обновления 1 (SP1)
  • SQL Server 2016 Developer
  • SQL Server 2016 Enterprise
  • SQL Server 2016 Express
  • SQL Server 2016 Standard
  • SQL Server 2016 Web