2016-09-13 3 views
3

Есть ли какие-либо конкретные настройки, которые говорят SQL-серверу, чтобы сделать CTE быстро?CTE очень медленный после миграции

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

  • Запрос принимает 0 секунд для выполнения на старом сервере, теперь она занимает сейчас 7 секунд на новый server
  • Функция выполняла 4 минуты и 27 секунд +/- 3 секунды для выполнения, теперь она занимает бесконечность.

Кроме того, диски на новом сервере являются SSD, а на старых - HDD, новые серверные барабаны - 32 ГБ, а старые - 12 ГБ.

Кто-нибудь знает, есть ли какая-либо специальная конфигурация, которую мы должны применять на новом сервере?

ли эти sqlplan файлы

  • New Server: Это занимает 7 секунд, чтобы выполнить
  • Old Server: Это занимает 0 секунд, чтобы выполнить

Любая помощь высоко ценится.

+1

https://www.mssqltips.com/sqlservertip/1936/sql-server-database-migration-checklist/ – Jeremy

+1

Пожалуйста, добавьте соответствующие планы выполнения от старых и новых серверов. – Lijo

+0

К сожалению, нет волшебного переключателя «сделайте мои запросы быстрым».Вам придется сделать это непросто: проверьте отсутствие индексов и/или устаревшую статистику, и если это не поможет, сравните планы выполнения на старом и новом сервере. Хорошие люди на http://dba.stackexchange.com могут помочь вам с последней частью. – Heinzi

ответ

2

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

Есть несколько вещей, которые вы можете сделать, в порядке от «легко» до «жесткого»:

  • переключателя назад уровень совместимости базы данных для предварительных 2014
  • включить флаг трассировки 9481 на любом сервер, сеанс или уровень запроса (но пожалуйста, обратите внимание, что querytraceon намек reqires привилегии системного администратора)
  • заморозить «хороший» план с планом руководства
  • переписать пораженный запрос, чтобы воспользоваться новой QE.

Обратите внимание: последнее и самое сложное решение является лучшим в одно и то же время, и самый легкий, вероятно, самый худший.

Вот больше информации об изменении QE, и это возможные эффекты: https://blogs.msdn.microsoft.com/psssql/2014/04/01/sql-server-2014s-new-cardinality-estimator-part-1/

Также о настройке указанного флага трассировки: https://support.microsoft.com/en-us/kb/2801413

Смежные вопросы