Пройдя некоторое время, я решил опубликовать этот вопрос из-за отсутствия ответа и извиниться, если есть аналогичный вопрос / ответ.
При выполнении запроса ниже на двух одинаково настроенных серверах SQL мы сталкиваемся с разными планами выполнения, которые влияют на производительность, и нам нужна помощь в выяснении причины.
Запрос:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
План выполнения сервера А
План выполнения сервера B Сервер B http://s2.postimg.org/z9fjrfv4n/server_B.png
Вы заметите, что сервер B имеет физическую операцию TOP в фактическом плане выполнения, и мы пытаемся выяснить, почему. Оба запроса используют один и тот же индекс в поиске индекса.
Вот некоторые детали сервера A и сервера B
Сервер A и B оба
Windows Server 2008 R2 Стандартный пакет обновления 1
24 ГБ ОЗУ
64-битная операционная система
Версии SQL Server 2012, полученные с помощью ( SELECT SERVERPROPERTY ('ProductVersion') )
Сервер A SQL версия 11.0.3000.0
Сервер B SQL версия 11.0.5058.0
Что мы пробовали
Почему сервер B имеет ТОП в плане выполнения? В этом простом примере запроса реальных проблем нет, но в более крупном запросе стоимость TOP увеличивается, и мы видим снижение производительности. Мы будем благодарны за любую помощь в устранении неполадок, и мы можем получить любую дополнительную информацию, которая может вам понадобиться.
GO
после строки подсчета строк. Вы также можете опубликовать свойства оператора Top?
TOP
Оператор предполагает ненулеваяSET ROWCOUNT
ранее был выполнен на этой связи. Попробуйте еще раз с выполнениемSET ROWCOUNT 0;
. Кроме того, опубликованные вами версии SQL не являются версиями SQL 2008 R2. ЗапуститеSELECT SERVERPROPERTY('ProductVersion');
на 2 серверах, чтобы получить актуальную версию SQL Server.