SQL Server 2016 vs 2012 einfügen Leistung


14
  • Ich habe zwei SQL Server-Instanzen auf demselben Server:

    • Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standard Edition (64-Bit)
    • Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64-Bit)
  • Die sp_configure-Ergebnisse sind auf beiden Instanzen gleich (mit Ausnahme der neuen 2016-Optionen).

  • Ich habe auf beiden Instanzen neue Datenbanken auf demselben Datenträgerordner erstellt. Die Autogrowth-Parameter sind dieselben.

  • Die Optionen zum automatischen Erstellen und automatischen Aktualisieren von Statistiken sind deaktiviert.

  • Dann habe ich einen Test mit 10000 Beilagen in einem Haufen gemacht:

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

Ergebnis 1

Die durchschnittliche Testzeit

  • 2012 - 530 ms
  • 2016 - 600 ms

2016 ist also um 11% langsamer.

  • Anschließend habe ich einen SQL Profiler-Trace mit in der Tabelle gespeicherten Ergebnissen erstellt, um die Dauer der einzelnen Einfügungen in Mikrosekunden anzuzeigen.

Ergebnis 2

Das Histogramm einer einzelnen Einfügedauer 2012 gegenüber 2016: Bildbeschreibung hier eingeben

Das Wachstum von Transaktionsprotokollen aus sys.dm_io_virtual_file_stats ist:

  • 2012 - 5174784 Bytes
  • 2016 - 5171200 Bytes

Während dieser Tests werden beide Instanzen gestartet. Es wird jedoch jeweils nur ein Test zu einer Instanz ausgeführt. Ich habe 8 GB RAM pro Instanz zugewiesen. Die Abfragepläne sind die gleichen. Es wäre interessant, jede Instanz auf einer eigenen Box auszuführen. Aber wahrscheinlich ist die eine Maschine besser, weil wir hier keine versteckten Hardware- und Umgebungsunterschiede haben.

Fragen

  • Warum ist 2016 langsamer?
  • Darf jemand diesen Test reproduzieren?

Jede Änderung mit TF 692 auf SQL Server 2016? blogs.msdn.microsoft.com/sql_server_team/…
Joe Obbish

"Jede Änderung mit TF 692 unter SQL Server 2016" Keine Änderungen.
Olga Sosonnykh

1
Ich würde die Tests erneut ausführen, aber die passive Instanz beim Testen herunterfahren. Auf der 2012-Instanz wird möglicherweise ein Prüfpunkt oder ein anderer asynchroner Prozess ausgeführt, nachdem Sie den Test abgeschlossen haben, wodurch der 2016-Instanz Ressourcen entzogen werden.
Nabil Becker

1
Außerdem sollten beide Instanzen vollständig gepatcht sein, sodass SQL 2016 SP 2 CU 2 und SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/… )
David Browne - Microsoft

3
Auch ohne explizite Transaktion wird nur geprüft, wie lange es dauert, die Protokolldatei zu leeren.
David Browne - Microsoft

Antworten:


1

Offensichtlich ist es sehr schwierig, genau die gleichen Versionen auf demselben Server zu haben, aber ... Ich hoffe, meine Ergebnisse werden Ihnen helfen. Ich habe zwei verschiedene Computer konfiguriert, beide Windows Server 2012 R2 Standard. Leider haben sie nicht die gleiche Hardware, aber ähnlich:

  1. Maschine 1 (SQL Server 2016)

    • Prozessor: Intel (R) Xeon (R) CPU X5650 @ 2,67 GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29. April 2016, 23:23:58 Uhr Copyright (c) Microsoft Corporation Standard Edition (64-Bit) unter Windows Server 2012 R2 Standard 6.3 (Build 9600:) (Hypervisor)
  2. Maschine 2 (SQL Server 2012)

    • Prozessor: Intel (R) Xeon (R) -CPU E5-2667 0 bei 2,9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14. Mai 2014, 18:34:29 Uhr Copyright (c) Microsoft Corporation Standard Edition (64-Bit) unter Windows NT 6.3 (Build 9600:) (Hypervisor)

Und ich führe auf beiden Rechnern fünfmal dasselbe Skript aus, das du bereitgestellt hast, und erhalte den folgenden Durchschnitt:

  • 2012: 9961
  • 2016: 8971

Was ist fast das Gegenteil der Ergebnisse, die Sie erhalten. Wie Sie gesehen haben, hat meine 2012-Maschine einen besseren Prozessor, aber die Festplatte, die normalerweise den Unterschied anzeigt, ist die gleiche. Also, selbst wenn 2012 bessere Ressourcen hat, ist das für meinen Fall etwas langsamer.

(Entschuldigung, bitte überprüfen Sie noch einmal, meine erste Version hatte einige wichtige Fehler.)


-2

Können Sie einen (TABLOCK) Hinweis hinzufügen , um die minimale Protokollierung zu aktivieren? Was ist der Unterschied nach dem Anwenden dieses Hinweises?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.