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

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

Ответов (4)

Решение

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

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

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

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

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

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

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

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

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

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

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