Не влияет ли работа базы данных SQL Server 2005 на уровень совместимости 80 на производительность?

Наше программное обеспечение должно работать на SQL Server 2000 и 2005. Чтобы упростить разработку, мы запускаем базы данных SQL Server 2005 на уровне совместимости 80. Однако производительность SQL в SQL Server выглядит медленнее, чем на SQL 2000 в некоторых (мы еще не подтвердили это с помощью тестов). Будет ли повышение уровня совместимости до 90 повысить производительность на серверах SQL 2005?

Ответ 1

Я думаю, что я где-то читал, что механизм базы данных SQL Server 2005 должен быть примерно на 30% быстрее, чем движок SQL Server 2000. Возможно, вам нужно запустить свою базу данных в режиме совместимости 90, чтобы получить эти преимущества.

Но я наткнулся на два сценария, где производительность может резко упасть при использовании mssql 2005 по сравнению с mssql 2000:

  • Параметр Sniffing: при использовании хранимой процедуры сервер sql вычисляет ровно один план выполнения в то время, вы сначала вызываете процедуру. План выполнения зависит от значений параметров, заданных для этого вызова. В нашем случае процедуры, которые обычно занимают около 10 секунд, работают в течение нескольких часов в mssql 2005. Взгляните здесь и здесь.

  • При использовании распределенных запросов mssql 2005 ведет себя по-разному относительно предположений о порядке сортировки на удаленном сервере. Поведение по умолчанию состоит в том, что сервер копирует все удаленные таблицы, участвующие в запросе, в локальный tempdb, а затем выполняет соединения локально. Обходным путем является использование OPENQUERY, где вы можете точно контролировать, какие результаты передаются с удаленного сервера.

Ответ 2

после того, как вы переместили БД на 2005, вы

обновить статистику с полным сканированием? перестроил индексы?

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

Ответ 3

Также FYI, если вы запустили уровень совместимости 90, некоторые вещи больше не поддерживаются, как внешние стили старого стиля (*= and =*)

Ответ 4

Используете ли вы подзапросы в своих запросах?

Из моего опыта, оператор SELECT с подзапросами, который отлично работает на SQL Server 2000, может сканировать на SQL Server 2005 (он может быть как 10x медленнее!).

Сделайте эксперимент - перепишите один запрос, чтобы исключить подзапросы и посмотреть, как изменяется его производительность.