Performances d'insertion de SQL Server 2016 par rapport à 2012


14
  • 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: entrez la description de l'image ici

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?

Un changement avec TF 692 sur SQL Server 2016? blogs.msdn.microsoft.com/sql_server_team/…
Joe Obbish

"Toute modification avec TF 692 sur SQL Server 2016" Aucune modification.
Olga Sosonnykh

1
Je relancerais les tests, mais j'arrêterais l'instance passive lors des tests. L'instance 2012 pourrait exécuter un point de contrôle ou un autre processus asynchrone une fois que vous avez terminé son test, ce qui enlève des ressources à l'instance 2016.
Nabil Becker

1
De plus, les deux instances doivent être complètement corrigées, donc SQL 2016 SP 2 CU 2 et SQL 2012 SP4 + GDR ( support.microsoft.com/en-us/help/4057116/… )
David Browne - Microsoft

3
De plus, sans transaction explicite, cela teste simplement le temps qu'il faut pour vider le fichier journal.
David Browne - Microsoft

Réponses:


1

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:

  1. Machine 1 (SQL Server 2016)

    • Processeur: Intel (R) Xeon (r) CPU X5650 @ 2,67 GHz
    • Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) 29 avril 2016 23:23:58 Copyright (c) Microsoft Corporation Standard Edition (64 bits) sur Windows Server 2012 R2 Standard 6.3 (Build 9600:) (Hyperviseur)
  2. Machine 2 (SQL Server 2012)

    • Processeur: Intel (R) Xeon (R) CPU E5-2667 0 @ 2,9 GHz
    • Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 14 mai 2014 18:34:29 Copyright (c) Microsoft Corporation Standard Edition (64 bits) sur Windows NT 6.3 (Build 9600:) (Hyperviseur)

Et j'ai exécuté 5 fois sur les deux machines le même script que vous avez fourni et obtenu la moyenne suivante:

  • 2012: 9961
  • 2016: 8971

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)


-2

Pouvez-vous ajouter (TABLOCK) conseil pour activer la journalisation minimale? Quelle est la différence après avoir appliqué cet indice?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.