Saya memigrasikan situs web besar dan basis data dari server lama (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2,5 GHz Quad Core / SAS disk) ke server yang lebih baru, jauh lebih baik (Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16 Prosesor inti / disk SSD).
Saya memisahkan file database di server lama, menyalin dan melampirkannya di server baru. Semuanya berjalan dengan sangat baik.
Setelah itu, saya mengubah ke tingkat kompatibilitas ke 110, memperbarui statistik, membangun kembali indeks.
Untuk kekecewaan besar saya, saya perhatikan bahwa sebagian besar permintaan sql jauh lebih lambat (2-3-4 kali lebih lambat) pada server SQL 2012 baru daripada pada server SQL 2008 yang lama.
Misalnya, di atas meja dengan sekitar 700 ribu catatan, pada server lama kueri pada indeks membutuhkan sekitar 100 ms. Di server baru, permintaan yang sama membutuhkan waktu sekitar 350 ms.
Hal yang sama terjadi untuk semua permintaan.
Saya akan sangat menghargai bantuan di sini. Beri tahu saya apa yang harus diperiksa / verifikasi. Karena saya merasa sangat sulit untuk percaya bahwa pada server yang lebih baik dengan SQL Server yang lebih baru, kinerjanya lebih buruk.
Keterangan lebih lanjut:
Memori diatur ke maks.
Saya punya tabel dan indeks ini:
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]
Saya menjalankan kueri ini:
set statistics time on;
select summaryid, count(summaryid) from Answer_Details_23 group by summaryid order by count(summaryid) desc;
set statistics time off;
SERVER LAMA - Waktu Eksekusi SQL Server: Waktu CPU = 419 ms, waktu yang berlalu = 695 ms.
SERVER BARU - Waktu Eksekusi SQL Server: Waktu CPU = 1340 ms, waktu yang berlalu = 1636 ms.
RENCANA EKSEKUSI yang diunggah di sini: http://we.tl/ARbPuvf9t8
Pembaruan selanjutnya:
- AMD 2.1GHz Opteron 16 core processor terlihat jauh lebih buruk daripada Intel 2.5GHz quad core
- Perbaikan hebat mengubah opsi daya windows dari ballanced ke high power
- Peningkatan lebih lanjut mengubah derajat maks paralelisme ke 8 dan ambang biaya ke 4
Sekarang, Waktu Eksekusi SQL Server: Waktu CPU = 550 ms, waktu yang berlalu = 828 ms.
Ini masih lebih buruk dari server lama, tetapi tidak terlalu buruk. Jika Anda memiliki saran lain (selain optimasi kueri lokal), jangan ragu untuk berkomentar.