Планы запросов меняют производительность в SQL Server 2014

10

Недавно мы обновили наш сервер с SQL Server 2008R2 до SQL Server 2014. У нас есть запрос, который нормально работал в 2008R2, но теперь в 2014 году он работает невероятно медленнее и имеет плохой план выполнения.

Я сделал несколько тестов ...

  1. Переключите БД 2014 обратно в режим совместимости 2008/2012.
  2. Протестируйте запрос, используя разбиение на страницы.

В результате оба запроса выполнялись так же, как и SQL Server 2008R2.

Почему план так плох и запрос выполняется так долго в SQL Server 2014?

Расчетное / Actual

На этом изображении показаны 2 запроса, один из которых использует число, аналогичное тому, которое он выполнял в 2008R2, а затем второе исправление с разбивкой на страницы. Оба работали в 2014 году, оба очень разные, но в 2008 году мы видим такую ​​же производительность, как если бы мы использовали нумерацию страниц в 2014 году.

Джефф
источник

Ответы:

7

Это не проблема, это дизайн и считается улучшением производительности.

Если ваши запросы не выполняются должным образом, вам необходимо указать это в коде вашей базы данных / приложения.

Вы можете форсировать старый оценщик Carnality, используя флаг трассировки 9481 на уровне сервера, сеанса или запроса (используя OPTION (QUERYTRACEON 9481)). Это будет принудительно независимо от уровня совместимости базы данных.

Команда CSS также разместила здесь тонну информации .

Более подробный пост в Оценщике Cardanility и изменениях в этом процессе в SQL Server 2014, включая пример.

Пол Уайт 9
источник
Это звучит как паршивое оправдание того, что что-то пошло не так
dvdmn