Я перенес большой веб-сайт и базу данных со старого сервера (Windows 2008 / SQL Server 2008/16 ГБ ОЗУ / 2 x 2,5 ГГц Quad Core / SAS-диски) на новый, гораздо лучший сервер (Windows 2008 R2 / SQL Server 2012 SP1 /). 64 ГБ ОЗУ / 2 x 2,1 ГГц 16-ядерные процессоры / SSD-диски).
Я отсоединил файлы базы данных на старом сервере, скопировал и прикрепил их на новом сервере. Все прошло очень хорошо.
После этого я перешел на уровень совместимости до 110, обновил статистику, перестроил индексы.
К моему огромному разочарованию, я заметил, что большинство SQL-запросов намного медленнее (в 2-3-4 раза медленнее) на новом сервере SQL 2012, чем на старом сервере SQL 2008.
Например, для таблицы, содержащей около 700 тыс. Записей, на старом сервере запрос по индексу занимал около 100 мс. На новом сервере тот же запрос занимает около 350 мс.
То же самое происходит для всех запросов.
Я был бы признателен за помощь здесь. Дайте мне знать, что проверить / проверить. Потому что мне очень трудно поверить, что на лучшем сервере с более новым SQL Server производительность хуже.
Больше деталей:
Память установлена на макс.
У меня есть эта таблица и индекс:
CREATE TABLE [dbo].[Answer_Details_23](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NOT NULL,
[SurveyID] [int] NOT NULL,
[CustomerID] [int] NOT NULL default 0,
[SummaryID] [int] NOT NULL,
[QuestionID] [int] NOT NULL,
[RowID] [int] NOT NULL default 0,
[OptionID] [int] NOT NULL default 0,
[EnteredText] [ntext] NULL,
CONSTRAINT [Answer_Details_23_PK] PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE NONCLUSTERED INDEX [IDX_Answer_Details_23_SummaryID_QuestionID] ON [dbo].[Answer_Details_23]
(
[SummaryID] ASC,
[QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Я выполнил этот запрос:
set statistics time on;
select summaryid, count(summaryid) from Answer_Details_23 group by summaryid order by count(summaryid) desc;
set statistics time off;
СТАРЫЙ СЕРВЕР - Время выполнения SQL Server: время ЦП = 419 мс, прошедшее время = 695 мс.
НОВЫЙ СЕРВЕР - Время выполнения SQL Server: время ЦП = 1340 мс, прошедшее время = 1636 мс.
ПЛАНЫ ИСПОЛНЕНИЯ выложены здесь: http://we.tl/ARbPuvf9t8
Позднее обновление:
- 16-ядерные процессоры AMD 2.1GHz Opteron выглядят намного хуже четырехъядерных процессоров Intel 2.5GHz
- Большое улучшение, изменяющее параметры электропитания стеклоподъемников от сбалансированного к мощному
- Дальнейшее улучшение изменяет максимальную степень параллелизма до 8 и порог стоимости до 4
Теперь время выполнения SQL Server: время ЦП = 550 мс, прошедшее время = 828 мс.
Это все еще хуже чем старый сервер, но не так плохо. Если у вас есть другие предложения (кроме оптимизации локальных запросов), пожалуйста, не стесняйтесь комментировать.