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:
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?
quelle
Antworten:
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:
Maschine 1 (SQL Server 2016)
Maschine 2 (SQL Server 2012)
Und ich führe auf beiden Rechnern fünfmal dasselbe Skript aus, das du bereitgestellt hast, und erhalte den folgenden Durchschnitt:
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.)
quelle
Können Sie einen
(TABLOCK)
Hinweis hinzufügen , um die minimale Protokollierung zu aktivieren? Was ist der Unterschied nach dem Anwenden dieses Hinweises?quelle