Saya memiliki dua contoh SQL Server di server yang sama:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Edisi Standar (64-bit)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 Edisi Perusahaan (X64) (64-bit)
sp_configure hasilnya sama di kedua instance (kecuali opsi 2016 baru).
Saya telah membuat database baru pada kedua instance pada folder disk yang sama. Parameter autogrowth adalah sama.
Opsi statistik autocreate dan pembaruan otomatis dimatikan.
Lalu saya telah membuat tes dengan 10.000 sisipan ke tumpukan:
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
Hasil 1
Waktu tes rata-rata
- 2012 - 530 ms
- 2016 - 600 ms
Jadi, 2016 sekitar 11% lebih lambat.
- Kemudian saya telah membuat jejak SQL Profiler dengan hasil disimpan ke tabel untuk melihat durasi memasukkan tunggal dalam mikrodetik.
Hasil 2
Histogram durasi memasukkan tunggal 2012 vs 2016:
Pertumbuhan log transaksi dari sys.dm_io_virtual_file_stats adalah:
- 2012 - 5174784 byte
- 2016 - 5171200 byte
Selama tes ini kedua contoh dimulai. Tetapi satu tes hanya berjalan pada satu contoh setiap kali. Saya telah mengalokasikan 8Gb RAM per instance. Paket permintaannya sama. Akan menarik untuk menjalankan setiap instance pada kotaknya sendiri. Tapi mungkin satu mesin lebih baik, karena di sini kita tidak memiliki perbedaan perangkat keras dan lingkungan.
Pertanyaan
- Mengapa 2016 lebih lambat?
- Bisakah seseorang mereproduksi tes ini?