Оценка мощности устаревших элементов Azure SQL не работает, как в SQL Server 2016 - PullRequest
0 голосов
/ 05 июля 2018

У нас есть две идентичные базы данных (точно такие же данные, структура и т. Д.), Одна в Azure Sql (Premium 500 DTU), а другая - на виртуальной машине в Azure с SQL Server 2016 SP1 (8 vcore, 64 ГБ ОЗУ). У нас есть запрос, который при запуске с «Устаревшей оценкой мощности» на уровне базы данных, для которого установлено значение OFF, приводит к тому, что время выполнения запроса для обеих баз данных составляет около 4 минут.

Если мы изменим «Устаревшую оценку мощности» на «ON» в обеих базах данных, то виртуальная машина с SQL Server 2016 с пакетом обновления 1 (SP1) выполнит один и тот же запрос через 30 секунд, а база данных SQL Azure закончится с еще худшей производительностью и займет почти 7 минут для выполнения. .

Переписать запрос на этом этапе не вариант. Я надеюсь, что кто-нибудь подскажет мне, как я могу заставить Azure SQL выполнить настройку «Оценка устаревшего количества элементов» и обеспечить производительность, аналогичную моей виртуальной машине с SQL Server 2016 с пакетом обновления 1 (SP1).

Я заметил, что в блоке SQL Server 2016 с пакетом обновления 1 (SP1) загрузка ЦП будет резко возрастать (более 90%), когда «Оценка устаревшей мощности» включена, а в Azure SQL процент DTU никогда не поднимается выше 25%.

1 Ответ

0 голосов
/ 05 июля 2018

В базе данных SQL Azure установите уровень совместимости равным 110, чтобы включить старый оценщик мощности.

ALTER DATABASE [YourDatabase] SET COMPATIBILITY_LEVEL = 110

На уровне запроса используйте подсказку ниже.

USE HINT ( 'FORCE_LEGACY_CARDINALITY_ESTIMATION')

Для получения дополнительной информации, пожалуйста, прочитайте здесь .

...