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?
la source
Réponses:
Evidemment c'est très difficile la coïncidence d'avoir exactement les mêmes versions sur le même serveur mais ... j'espère que mes résultats vous aideront. J'ai deux machines différentes configurées à la fois Windows Server 2012 R2 Standard. Malheureusement, ils n'ont pas le même matériel mais similaire:
Machine 1 (SQL Server 2016)
Machine 2 (SQL Server 2012)
Et j'ai exécuté 5 fois sur les deux machines le même script que vous avez fourni et obtenu la moyenne suivante:
Quels sont presque les résultats opposés que vous obtenez. Quoi qu'il en soit, comme vous l'avez vu, ma machine 2012 a un meilleur processeur mais le disque dur qui est normalement ce qui montre la différence est le même. Donc, même si 2012 a de meilleures ressources, c'est un peu plus lent pour mon cas.
(Désolé, s'il vous plaît, vérifiez à nouveau, ma première version avait quelques erratums importants)
la source
Pouvez-vous ajouter
(TABLOCK)
conseil pour activer la journalisation minimale? Quelle est la différence après avoir appliqué cet indice?la source