Наше программное обеспечение должно работать на SQL Server 2000 и 2005. Чтобы упростить разработку, мы запускаем базы данных SQL Server 2005 на уровне совместимости 80. Однако производительность SQL в SQL Server выглядит медленнее, чем на SQL 2000 в некоторых (мы еще не подтвердили это с помощью тестов). Будет ли повышение уровня совместимости до 90 повысить производительность на серверах SQL 2005?
Не влияет ли работа базы данных SQL Server 2005 на уровень совместимости 80 на производительность?
Ответ 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 медленнее!).
Сделайте эксперимент - перепишите один запрос, чтобы исключить подзапросы и посмотреть, как изменяется его производительность.