web-dev-qa-db-fra.com

SQL Server 2016 vs 2012 Insérer performance

  • J'ai deux instances SQL Server sur le même serveur:

    • Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (x64) édition standard (64 bits)
    • Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) Enterprise Edition (64 bits)
  • les résultats SP_Configure sont les mêmes sur les deux cas (à 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 d'autogrotthe sont les mêmes.

  • Les options de statistiques de l'autocréate et de l'AutoUPDate sont désactivées.

  • Ensuite, j'ai effectué 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

Donc, 2016 est d'environ 11% plus lentement.

  • Ensuite, j'ai fabriqué une trace de profileur SQL avec des résultats enregistrés sur la table pour voir la durée d'insertion unique dans les microsecondes.

Résultat 2

L'histogramme d'A Durée d'insertion unique 2012 vs 2016: enter image description here

La croissance des journaux de transaction à partir de sys.dm_io_virtual_file_stats est:

  • 2012 - 5174784 octets
  • 2016 - 5171200 octets

Pendant ces tests, les deux cas sont lancés. Mais un test ne fonctionne qu'à chaque fois. J'ai alloué 8GB RAM par exemple. Les plans de requête sont les mêmes. Il serait intéressant de courir chaque instance sur sa propre boîte. Mais probablement, la seule machine est meilleure, car nous n'avons probablement pas matériels et environnements de différences cachés.

Questions

  • Pourquoi 2016 est-il plus lent?
  • Que quelqu'un reproduisait ce test?
14
Olga Sosonnykh

Évidemment, il est très difficile la coïncidence d'avoir exactement les mêmes versions dans le même serveur, mais ... J'espère que mes résultats vous aideront. J'ai deux machines différentes configurées à la fois standard Windows Server 2012 R2. Malheureusement, ils n'ont pas le même matériel mais semblable:

  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 avr. 2016 23:23:58 Copyright (c) Edition standard Microsoft Corporation (64 bits) sur Windows Server 2012 R2 Standard 6.3 (Buildroviseur) (Hypervisor)
  2. Machine 2 (SQL Server 2012)

    • Processeur: Intel (R) Xeon (R) CPU E5-2667 0 @ 9 GHz
    • Microsoft SQL Server 2012 - 11.0.0.5058.0 (X64) 14 mai 2014 18:34:29 Copyright (c) Edition standard de Microsoft Corporation (64 bits) sur Windows NT 6.3 (Buildroviseur 9600 :) (Hypervisor)

Et je cours 5 fois dans 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 la 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 des erratums importants)

1
Angel M.