インクジェットプリンター用インクカートリッジ EPSON エプソン 純正インク。EPSON エプソン 純正インク インクジェットプリンター用インクカートリッジ ICY59 イエロー 【PX-1001用】
Hekaton、ハッシュ·バケット番号の正しい選択で - テスト;結果今日、私はハッシュ衝突(ハッシュ衝突が)それはHekaton努力 - テストにどのような影響を与えるかで、数年後に100万レコード、テスト対象のハッシュバケットを挿入するためにHakatonに、2048年の樽の数のハッシュインデックスを使用し 非常に、非常に興味深いです。まず第一に、私はハッシュの衝突が何であるかを紹介したいと思います。 Hakatonテーブルはハッシュインデックス(ハッシュインデックス)実装され、中には、SQL Server 2014年に(非常に多くの希望を)知っているかもしれません。ウィキペディアは、それが基本的なハッシュインデックスのアプリケーションであり、これを詳細に説明しています。ハッシュ関数は、対応するバケットのインデックスキーのハッシュインデックスにマッピングされ、ハッシュ関数の結果は、ハッシュ·バケットにあなたの最後の行を決定します。複数のキーが同じ値にハッシュする場合、SQL Serverは、ハッシュバケットにハッシュバケットに挿入されると共に連結された複数の入口を有します。と“ジョン·スミス“あなたは、チャートからキー&ldquoを見ることができますサンドラ·ディー”同じバケット - テストにハッシュ; - テストここで152バレルは、次のとおりです。(ウィキペディアから)次の図を考えてみましょう。これは、2つの行が挿入のパフォーマンスだけでなく、SELECTクエリのパフォーマンスに影響を与え、同じハッシュバケット内に存在することを意味します。 INSERT時には、SQL Serverは、SELECTクエリの実行中にリンクのリストを維持する必要がある、SQL Serverは、リンクのリストをスキャンする必要があります。導入ハッシュ衝突した後、我々は簡単な例を示しているでハッシュ衝突のパフォーマンスへの影響が付属しています。のはHekatonテーブルを使用してデータベースを作成してみましょう:。1 - 3はGO 7 FILEGROUP HekatonFileGroupをADDデータベース6にALTER DATABASE HashCollisionsへ4 5 --add MEMORY_OPTIMIZED_DATAファイルグループがMEMORY_OPTIMIZED_DATA 8含むデータベースHashCollisionsを作成するには、新規データベースの作成2 GO 9 10 USE HashCollisions11 GO12 13 \\ Program Files \\ MicrosoftのSQLサーバ\\ MSSQL12.MSSQLSERVER \\ MSSQL \\ DATA \\ HashCollisionsContainer: - group14にALTER DATABASE HashCollisionsはFILE15(16 NAME = N'HekatonContainer '、17 FILENAME = N'Cを追加以前作成したファイルに新しいファイルを追加します表TestTable24(25のCol1 INT NOT NULL PRIMARY KEY NONCLUSTEREDハッシュと(BUCKET_COUNT = 1024)、26 Col2にINT NOT NULLで、27 COL3 INT NOT NULL28)を作成し、簡単な表23を作成する - [HekatonFileGroup] 20 GO21 22をファイルグループTO '18)19 - テスト;バレルの数はあまりないですし、私は、テーブル1000000に挿入する29 WITH30(31 MEMORY_OPTIMIZED = ON、32耐久性= SCHEMA_ONLY33)34は、ここで私は1024年のハッシュバケット番号 - テストを使用し、あなたがコードから見ることができますGOレコード。次に、私はネイティブコンパイルされたストアドプロシージャを作成しますので、私はHekaton泥棒ラピッドでき:1 - AS OWNER 7 EXECUTE ASを4 NATIVE_COMPILATION、5 SCHEMABINDING、6 WITH PROCEDURE InsertTestData 3のCREATEネイティブコンパイルストアドプロシージャの作成2 8 10(11 TRANSACTION 12分離レベル= SNAPSHOT、13 LANGUAGE = N'us_english'14)15 16 DECLAREi INT = 017 18 WHILEi&LT WITH 9 ATOMICをBEGIN; 100000019 BEGIN20 INSERT INTO dbo.TestTable(は、col1、col2 COL3)VALUESは、(i @、I @、I)21 22 SETI + = 123終了24 END25 GOは、ここで私は100万レコードを挿入するために、単純なループを使用して、見ることができます。 4コアCPU、4Gのメモリ、仮想マシンでは、我々はストアドプロシージャを実行するために、時間の統計を開く:ほぼ42秒の1のSET統計時間ON2 3 EXEC dbo.InsertTestDataの実行時間を、それは非常に遅れています。私たちはあなたのパフォーマンスは常に改善されている、バケツの数が増加するが表示され、1048576に樽の数を倍増し続けています。 1 DROP PROCEDURE dbo.InsertTestData 2 DROP TABLE dbo.TestTable 3 4 - 表TESTTABLE 6(7のCol1 INT NOT NULL PRIMARY KEY NONCLUSTEREDハッシュと(BUCKET_COUNT = 1048576)、8 Col2にINT NOT NULL、9 COL3をCREATE単純なテーブル5を作成します。 INT NOT NULL10)11 WITH12(13 MEMORY_OPTIMIZED = ON、14耐久性= SCHEMA_ONLY15)16 GO17 18 19 - 28 26 BEGIN27 ATOMIC AS OWNER25、EXECUTE AS 24、ネイティブコンパイルストアドProcedure20、22 NATIVE_COMPILATION WITH PROCEDURE InsertTestData21をCREATE 23 SCHEMABINDINGを作成します( 29 TRANSACTION 30分離レベル= SNAPSHOT、31 LANGUAGE = N'us_english'32)33 34 DECLAREi INT = 035 36 WHILEi< 100000037 BEGIN38 INSERT INTO dbo.TestTable(は、col1、col2 COL3)VALUES(I、私は、我々はこのストアドプロシージャを実行し続けるI)39 40 SETI + = 141 END42のEND43のGO:1のSET統計時間ON2 3 EXEC dbo.InsertTestDataは同じストアドプロシージャを実行するだけで780ミリ秒を取得し、初めて1024テストはすでに大きな違いである樽の数を、実行します。 1 SELECT * FROM sys.dm_db_xtp_hash_index_statsこのテストは、私たちを教えて:あなたはまた、DMVsys.dm_db_xtp_hash_index_statsはあなたのハッシュインデックスに見て使用することができ、いくつかの樽を使用ありますか?バケットHekatonハッシュインデックスの数に、彼らは非常にSQL Serverのパフォーマンスに影響するため、正しい選択をするために! - テスト;バレルの最適な数が異なる - テストの数のハッシュ値のインデックスである必要があります加えて、(少し異なる値の数に)いくつかの空き領域を確保するために、安全側に。あなたはメモリの反対を無駄にしているので、あなたはまた、あまりにもバケットの数を選択することはできません。 - テスト、ほぼすべてのセット - テスト中のSQL Serverでの作業に基づいているデータベースああ縮小除き、可能性があります!注意をありがとうございました!