J'ai deux instances SQL Server sur le même serveur:
- Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Standard Edition (64 bits)
- Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64 bits)
Les résultats de sp_configure sont les mêmes sur les deux instances (à l'exception des nouvelles options de 2016).
J'ai créé de nouvelles bases de données sur les deux instances sur le même dossier de disque. Les paramètres de croissance automatique sont les mêmes.
Les options de statistiques de création automatique et de mise à jour automatique sont désactivées.
Ensuite, j'ai fait un test avec 10000 inserts dans un tas:
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
Résultat 1
Le temps de test moyen
- 2012 - 530 ms
- 2016 - 600 ms
Ainsi, 2016 est environ 11% plus lent.
- Ensuite, j'ai fait une trace SQL Profiler avec les résultats enregistrés dans la table pour voir la durée d'insertion unique en microsecondes.
Résultat 2
L'histogramme d'une durée d'insertion unique 2012 vs 2016:
La croissance des journaux de transactions à partir de sys.dm_io_virtual_file_stats est la suivante:
- 2012 - 5174784 octets
- 2016 - 5171200 octets
Au cours de ces tests, les deux instances sont démarrées. Mais un test ne s'exécute qu'à chaque fois. J'ai alloué 8 Go de RAM par instance. Les plans de requête sont les mêmes. Il serait intéressant d'exécuter chaque instance sur sa propre boîte. Mais probablement la seule machine est meilleure, car ici nous n'avons pas de différences cachées entre le matériel et l'environnement.
Des questions
- Pourquoi 2016 est-elle plus lente?
- Quelqu'un peut-il reproduire ce test?