1
大きなバルクインサートを耐久性と耐久性のないメモリ最適化テーブルに実行すると、私は両方に対して同じ速度を得ています。耐久性のないメモリ最適化テーブルへの一括挿入の速度は、耐久性のあるメモリ最適化テーブルより速いはずですか?もしそうなら、私はここで間違って何をしていますか?メモリに最適化された非耐久性テーブルへのバルクインサートは、耐久性テーブルと同じスピードになっているのはなぜですか?
私のテストは以下の通りです。一貫して〜30秒かかります。これはSQL Server 2016 SP1です。バルク挿入は、私が生成したcsvファイルから1000万行です。
SQL
CREATE TABLE Users_ND (
Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=10000000),
Username VARCHAR(200) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_ONLY);
CREATE TABLE Users_D (
Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=10000000),
Username VARCHAR(200) NOT NULL
) WITH (MEMORY_OPTIMIZED=ON, DURABILITY = SCHEMA_AND_DATA);
SET STATISTICS TIME ON;
SET NOCOUNT ON;
BULK INSERT Users_ND
FROM 'users-huge.csv'
WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', BATCHSIZE = 1000000);
BULK INSERT Users_D
FROM 'users-huge.csv'
WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n', BATCHSIZE = 1000000);
ユーザー-huge.csv
Id, Username
,user1
,user2
...
,user10000000
あなたの遅延耐性設定は何ですか?データがすべてロードされる前にディスクへの書き込みを開始しない場合、ロードは確実に同じ時間を要します。また、システムに存在する可能性があるディスク書き込みキャッシングも考慮してください。 –
また、I/OではなくCPUがパフォーマンスの限界要因になると考えてください。 –