Mam dwa wystąpienia programu SQL Server na tym samym serwerze:
- 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)
Wyniki sp_configure są takie same w obu instancjach (z wyjątkiem nowych opcji 2016).
Utworzyłem nowe bazy danych dla obu instancji w tym samym folderze na dysku. Parametry wzrostu są takie same.
Opcje statystyk automatycznego tworzenia i automatycznej aktualizacji są wyłączone.
Następnie wykonałem test z 10000 wstawkami w stercie:
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
Wynik 1
Średni czas testu
- 2012 - 530 ms
- 2016 - 600 ms
Tak więc rok 2016 jest o 11% wolniejszy.
- Następnie utworzyłem śledzenie programu SQL Profiler z wynikami zapisanymi w tabeli, aby zobaczyć czas trwania pojedynczego wstawiania w mikrosekundach.
Wynik 2
Histogram czasu trwania pojedynczej wkładki 2012 vs 2016:
Wzrost dzienników transakcji z sys.dm_io_virtual_file_stats wynosi:
- 2012 - 5174784 bajtów
- 2016 - 5171200 bajtów
Podczas tych testów uruchamiane są oba wystąpienia. Ale za każdym razem jeden test jest uruchamiany tylko w jednej instancji. Przydzieliłem 8 GB pamięci RAM na instancję. Plany zapytań są takie same. Interesujące byłoby uruchomienie każdej instancji na osobnym polu. Ale prawdopodobnie jedna maszyna jest lepsza, ponieważ tutaj nie mamy ukrytych różnic sprzętowych i środowiskowych.
pytania
- Dlaczego 2016 jest wolniejszy?
- Czy ktoś może odtworzyć ten test?