Я перемістив великий веб-сайт та базу даних зі старого сервера (Windows 2008 / SQL Server 2008/16 ГБ оперативної пам’яті / 2 х 2,5 ГГц Quad Core / SAS диски) на новий, набагато кращий сервер (Windows 2008 R2 / SQL Server 2012 SP1 / 64 ГБ оперативної пам’яті / 2 х 2,1 ГГц 16 ядерних процесорів / SSD дисків).
Я відокремив файли баз даних на старому сервері, скопіював і приєднав їх на новому сервері. Все пройшло дуже добре.
Після цього я змінив рівень сумісності до 110, оновив статистику, відновив індекси.
На моє величезне розчарування, я помітив, що більшість запитів sql набагато повільніше (у 2-3-4 рази повільніше) на новому сервері SQL 2012, ніж на старому сервері SQL 2008.
Наприклад, на таблиці з близько 700 к записів, на старому сервері запит на індекс займав близько 100 мс. На новому сервері цей самий запит займає близько 350 мс.
Те саме відбувається для всіх запитів.
Я би вдячний тут за допомогою. Дайте мені знати, що перевірити / перевірити. Оскільки мені дуже важко повірити, що на кращому сервері з новим SQL сервером продуктивність гірша.
Детальніше:
Пам'ять встановлена на макс.
У мене є ця таблиця та індекс:
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
Пізніше оновлення:
- Ядра AMD 2.1GHz Opteron 16 виглядають набагато гірше, ніж чотириядерні процесори Intel 2.5GHz
- Значне вдосконалення, зміна параметрів живлення Windows з збалансованої на високу
- Подальше вдосконалення змінюючи максимальний ступінь паралелізму до 8 та поріг витрат до 4
Тепер час виконання SQL Server: час процесора = 550 мс, минулий час = 828 мс.
Це все ще гірше, ніж старий сервер, але не так вже й погано. Якщо у вас є якісь інші пропозиції (крім місцевих оптимізацій запитів), будь ласка, коментуйте.