SQL Server 2016 ve 2012 insert performansı


14
  • Aynı sunucuda iki SQL Server örneği var:

    • Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standart Sürüm (64 bit)
    • Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Kurumsal Sürüm (64 bit)
  • sp_configure sonuçları her iki örnekte de aynıdır (yeni 2016 seçenekleri hariç).

  • Aynı disk klasöründeki her iki durumda da yeni veritabanları oluşturdum. Otomatik büyüme parametreleri aynıdır.

  • Otomatik oluşturma ve otomatik güncelleme istatistikleri seçenekleri kapalıdır.

  • Sonra bir yığın içine 10000 ekler ile bir test yaptım:

set nocount on
go

create table dbo.TestInsert ( i int not null, s varchar(50) not null )

declare @d1 datetime, @d2 datetime, @i int
set @d1 = getdate() 
set @i = 1

while @i <= 10000
begin
  insert into dbo.TestInsert ( i, s ) select @i, replicate( 'a', 50 )
  set @i = @i + 1
end

set @d2 = getdate()
select datediff(ms, @d1, @d2)
drop table dbo.TestInsert

Sonuç 1

Ortalama test süresi

  • 2012 - 530 ms
  • 2016-600 ms

Yani, 2016 yaklaşık% 11 daha yavaş.

  • Sonra mikrosaniye cinsinden tek ekleme süresini görmek için sonuçları tabloya kaydedilmiş bir SQL Profiler izleme yaptık.

Sonuç 2

2012 ile 2016 arasındaki tek kesici uç süresinin histogramı : resim açıklamasını buraya girin

İşlem günlüklerinin sys.dm_io_virtual_file_stats'tan büyümesi:

  • 2012 - 5174784 bayt
  • 2016 - 5171200 bayt

Bu testler sırasında her iki örnek de başlatılır. Ancak bir test her seferinde yalnızca bir örnekte gerçekleştirilir. Örnek başına 8Gb RAM ayırdım. Sorgu planları aynıdır. Her örneği kendi kutusunda çalıştırmak ilginç olurdu. Ama muhtemelen bir makine daha iyidir, çünkü burada hiçbir donanımımız ve çevremizdeki gizli farklarımız yok.

Sorular

  • 2016 neden daha yavaş?
  • Birisi bu testi tekrarlayabilir mi?

SQL Server 2016'da TF 692 ile herhangi bir değişiklik yaptınız mı? blogs.msdn.microsoft.com/sql_server_team/…
Joe Obbish

"SQL Server 2016'da TF 692 ile yapılan herhangi bir değişiklik" Değişiklik yok.
Olga Sosonnykh

1
Testleri tekrar yapardım ama test ederken pasif örneği kapattım. Testi gerçekleştirdikten sonra, kaynakları 2016 örneğinden uzaklaştırarak 2012 örneği bir denetim noktası veya başka bir zaman uyumsuzluk işlemi kullanıyor olabilir.
Nabil Becker

1
Ayrıca her iki örnek de tamamen yamanmalıdır, bu nedenle SQL 2016 SP 2 CU 2 ve SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/… )
David Browne - Microsoft

3
Ayrıca açık bir işlem olmadan bu sadece günlük dosyasını yıkamanın ne kadar sürdüğünü test eder.
David Browne - Microsoft

Yanıtlar:


1

Açıkçası aynı sunucuda tam olarak aynı sürümlere sahip olmak tesadüf değil ama ... Umarım sonuçlarım size yardımcı olacaktır. Windows Server 2012 R2 Standard'ın her ikisini de yapılandırmış iki farklı makinem var. Ne yazık ki aynı donanıma sahip değiller:

  1. Makine 1 (SQL Server 2016)

    • İşlemci: Intel (R) Xeon (r) CPU X5650 @ 2.67GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29 Nisan 2016 23:23:58 Telif Hakkı (c) Windows Server 2012 R2 Standard 6.3 (Build 9600:) (Hipervizör) üzerinde Microsoft Corporation Standard Edition (64-bit)
  2. Makine 2 (SQL Server 2012)

    • İşlemci: Intel (R) Xeon (R) CPU E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14 Mayıs 2014 18:34:29 Telif Hakkı (c) Windows NT 6.3 üzerinde Microsoft Corporation Standard Edition (64 bit) (Derleme 9600:) (Hipervizör)

Ve her iki makinede de sağladığınız ve aşağıdaki ortalamayı aldığınız komut dosyasını 5 kez çalıştırıyorum:

  • 2012: 9961
  • 2016: 8971

Elde ettiğiniz neredeyse zıt sonuçlar nedir. Her neyse, gördüğünüz gibi, 2012 makinem daha iyi bir işlemciye sahip ancak normalde farkı gösteren sabit disk aynı. 2012'nin daha iyi kaynakları olsa bile benim durumum için biraz daha yavaş.

(Üzgünüm, lütfen tekrar kontrol edin, ilk versiyonumda bazı önemli erratumlar vardı)


-2

(TABLOCK) Minimum günlük kaydını etkinleştirmek için ipucu ekleyebilir misiniz ? Bu ipucunu uyguladıktan sonra fark nedir?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.