SQL Server 2016と2012の挿入パフォーマンス


14
  • 同じサーバーに2つのSQL Serverインスタンスがあります。

    • Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)Standard Edition(64ビット)
    • Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)Enterprise Edition(64ビット)
  • sp_configureの結果は、両方のインスタンスで同じです(新しい2016オプションを除く)。

  • 同じディスクフォルダーの両方のインスタンスに新しいデータベースを作成しました。自動成長パラメータは同じです。

  • 統計の自動作成および自動更新オプションはオフになっています。

  • 次に、10000の挿入をヒープにテストしました。

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

結果1

平均テスト時間

  • 2012-530ミリ秒
  • 2016-600ミリ秒

したがって、2016年は約11%遅くなります。

  • その後、テーブルに保存された結果を使用してSQLプロファイラートレースを作成し、マイクロ秒単位の単一挿入期間を確認しました。

結果2

2012年と2016年の単一挿入期間のヒストグラム: ここに画像の説明を入力してください

sys.dm_io_virtual_file_statsからのトランザクションログの増加は次のとおりです。

  • 2012-5174784バイト
  • 2016-5171200バイト

これらのテスト中に、両方のインスタンスが開始されます。ただし、1つのテストは毎回1つのインスタンスでのみ実行されます。インスタンスごとに8Gb RAMを割り当てました。クエリプランは同じです。各インスタンスを独自のボックスで実行すると興味深いでしょう。ただし、ここではハードウェアと環境の隠れた違いがないため、おそらく1台のマシンの方が適しています。

ご質問

  • 2016年はなぜ遅いのですか?
  • 誰かがこのテストを再現できますか?

SQL Server 2016のTF 692に変更はありますか?blogs.msdn.microsoft.com/sql_server_team/...
ジョーObbish

「SQL Server 2016でのTF 692の変更」変更なし。
オルガソソニク

1
テストを再度実行しますが、テスト時にはパッシブインスタンスをシャットダウンします。テストが完了すると、2012インスタンスはチェックポイントまたは他の非同期プロセスを実行し、2016インスタンスからリソースを奪う可能性があります。
ナビルベッカー

1
また、両方のインスタンスが完全にSQL 2016 SP 2 CU 2、およびSQL 2012 SP4 + GDR(ので、パッチを適用する必要がありますsupport.microsoft.com/en-us/help/4057116/...
マイクロソフト-デイビット・ブラウン

3
また、明示的なトランザクションがない場合、これはログファイルをフラッシュするのにかかる時間をテストするだけです。
デビッド・ブラウン-マイクロソフト

回答:


1

明らかに、同じサーバーにまったく同じバージョンが存在することは非常に困難ですが、...私の結果がお役に立てば幸いです。Windows Server 2012 R2 Standardの両方で構成された2つの異なるマシンがあります。残念ながら、それらは同じハードウェアではなく類似しています:

  1. マシン1(SQL Server 2016)

    • プロセッサー:Intel(R)Xeon(r)CPU X5650 @ 2.67GHz
    • Microsoft SQL Server 2016(RTM)-13.0.1601.5(X64)2016年4月29日23:23:58 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows Server 2012 R2 Standard 6.3(Build 9600:)(ハイパーバイザー)
  2. マシン2(SQL Server 2012)

    • プロセッサー:Intel(R)Xeon(R)CPU E5-2667 0 @ 2.9 GHz
    • Microsoft SQL Server 2012-11.0.5058.0(X64)2014年5月14日18:34:29 Copyright(c)Microsoft Corporation Standard Edition(64-bit)on Windows NT 6.3(Build 9600:)(ハイパーバイザー)

そして、私が両方のマシンであなたが提供した同じスクリプトを5回実行し、次の平均を取得しました。

  • 2012:9961
  • 2016:8971

ほぼ正反対の結果が得られます。とにかく、あなたが見たように、私の2012マシンはより良いプロセッサを持っていますが、通常違いを示すものであるハードディスクは同じです。したがって、2012年のリソースが優れていても、私の場合は少し遅くなります。

(申し訳ありませんが、もう一度確認してください。私の最初のバージョンにはいくつかの重要なエラッタがありました)


-2

(TABLOCK) 最小限のロギングを有効にするヒントを追加できますか?このヒントを適用した後の違いは何ですか?

INSERT INTO t_heap WITH (TABLOCK) 
SELECT * 
FROM t_source
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.