Вопрос о плане выполнения SQL Server - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть два сервера, на которых я занимаюсь разработкой, и я не администратор баз данных, но у нас их нет, поэтому я пытаюсь выяснить некоторые проблемы с производительностью, которые у меня возникают. Локально у меня установлен SQL Server 2008 R2, и когда ORM, который я использую, выполняет запрос, он возвращает результаты менее чем за секунду. Когда я выполняю тот же самый запрос на нашем сервере разработки с SQL Server 2005, это занимает более минуты. Я рассмотрел план выполнения для них обоих, главное, что бросается в глаза, это то, что последние две строки запроса имеют оператор order by. На сервере 2005 года это 100% стоимости. на сервере 2008 его 0% от стоимости. Есть ли какая-то обстановка, которую я пропускаю? Оба сервера содержат примерно одинаковые данные и одинаковые индексы / ключи / и т. Д. ..... поскольку локальная копия - это просто восстановление из резервной копии.

Мое лучшее предположение - сервер 2005 года сортирует все таблицы, а затем выдает результаты (200 строк). Где сервер 2008 получает все результаты, а затем сортирует их. (200 результатов также.)

Ссылка на план медленного выполнения: http://pastebin.com/sUCiVk8j

Ссылка на план быстрого исполнения: http://pastebin.com/EdR7zFAn

Я бы опубликовал запрос, но он утомительно длинный, потому что у меня есть куча включений и его Entity Framework, который генерирует запрос.

Заранее спасибо.

Редактировать: Я открыл диспетчер задач на сервере SQL, на котором он работает, и ЦП переходит на 100% во время выполнения этого запроса.

Редактировать: добавлена ​​версия XML для jsfiddle.net. pastebin не позволил бы мне из-за размера. Просто использовал окно CSS для XML.

Фактический 2008R2: http://jsfiddle.net/wgsv6/2/ Фактическое 2005: http://jsfiddle.net/wgsv6/3/

Ответы [ 2 ]

0 голосов
/ 12 сентября 2011

Статистика может быть устаревшей на сервере разработки.

0 голосов
/ 12 сентября 2011

Трудно сказать, не увидев запрос, но возможно ли, что вы пропустили INDEX на медленном сервере?

...