У нас есть две идентичные базы данных (точно такие же данные, структура и т. Д.), Одна в Azure Sql (Premium 500 DTU), а другая на виртуальной машине в Azure под управлением SQL Server 2016 SP1 (8 виртуальных ядер, 64 ГБ ОЗУ). У нас есть запрос, который при запуске с «Legacy Cardinality Estimation» на уровне базы данных, установленным на OFF, приводит к тому, что время выполнения запроса в обеих базах данных составляет около 4 минут.
Если мы изменим «Оценка мощности предыдущих версий» на ВКЛ в обеих базах данных, виртуальная машина с SQL Server 2016 SP1 выполнит тот же запрос за 30 секунд, в то время как база данных Azure SQL будет работать с еще худшей производительностью и потребует почти 7 минут для выполнения.
Повторное написание запроса на данном этапе не вариант. Я надеюсь, что кто-нибудь скажет мне, как я могу заставить Azure SQL соблюдать параметр «Legacy Cardinality Estimation» и обеспечивать производительность, аналогичную моей виртуальной машине SQL Server 2016 SP1.
Я заметил, что в блоке SQL Server 2016 SP1 загрузка ЦП будет резко возрастать (90% +), когда «Legacy Cardinality Estimation» включена, в то время как в Azure SQL процент DTU никогда не поднимается выше 25%.