Eski bir sunucudan (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz Dört Çekirdekli / SAS diskler) büyük bir web sitesini ve veritabanını daha yeni, çok daha iyi bir sunucuya (Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2,1 GHz 16 Çekirdekli işlemciler / SSD diskler).
Eski sunucudaki veritabanı dosyalarını ayırdım, kopyaladım ve yeni sunucuya iliştirdim. Her şey çok iyi gitti.
Bundan sonra, uyumluluk seviyesini 110 olarak güncelledim, güncellenmiş istatistikler, dizinleri yeniden oluşturdum.
Büyük hayal kırıklığım için, çoğu sql sorgusunun yeni SQL 2012 sunucusunda eski SQL 2008 sunucusundan çok daha yavaş (2-3-4 kat daha yavaş) olduğunu fark ettim.
Örneğin, yaklaşık 700 bin kayıt içeren bir tabloda, eski sunucuda dizin üzerindeki bir sorgu yaklaşık 100 ms sürdü. Yeni sunucuda, aynı sorgu yaklaşık 350 ms sürer.
Tüm sorgular için de aynı şey geçerlidir.
Burada bazı yardımları takdir ediyorum. Neyi kontrol edeceğim / doğrulayacağımı bana bildirin. Çünkü daha yeni bir SQL Server'a sahip daha iyi bir sunucuda performansın daha kötü olduğuna inanmak çok zor.
Daha fazla detay:
Bellek maks.
Bu tablo ve dizin var:
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]
Bu sorguyu yürüttüm:
set statistics time on;
select summaryid, count(summaryid) from Answer_Details_23 group by summaryid order by count(summaryid) desc;
set statistics time off;
ESKİ SUNUCU - SQL Server Yürütme Süreleri: CPU süresi = 419 ms, geçen süre = 695 ms.
YENİ SUNUCU - SQL Server Yürütme Süreleri: CPU süresi = 1340 ms, geçen süre = 1636 ms.
İDARİ PLANLAR buraya yüklendi: http://we.tl/ARbPuvf9t8
Daha sonra güncelleme:
- AMD 2.1GHz Opteron 16 çekirdekli işlemciler, Intel 2.5GHz dört çekirdekli işlemcilerden çok daha kötü görünüyor
- Dengeli pencereden yüksek güce değişen Windows güç seçeneklerini büyük iyileştirme
- Maksimum paralellik derecesini 8'e ve maliyet eşiğini 4'e değiştiren daha fazla iyileştirme
Şimdi, SQL Server Yürütme Süreleri: CPU süresi = 550 ms, geçen süre = 828 ms.
Hala eski sunucudan daha kötü, ama o kadar da kötü değil. Başka önerileriniz varsa (yerel sorgu optimizasyonları dışında) lütfen yorum yapmaktan çekinmeyin.