为什么批量插入到内存优化的非持久性 table 与持久性 table 的速度相同?
Why is a bulk insert to a memory-optimized non-durable table the same speed as a durable table?
当 运行 向经优化的持久内存和非持久内存 table 进行大批量插入时,我获得的两者速度相同。向非持久内存优化 table 批量插入的速度不应该比持久内存优化 table 快吗?如果是这样,我在这里做错了什么?
我的测试如下,持续需要大约 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
原来我遇到这个问题是因为批量插入的源文件保存在慢速硬盘上,所以在读取文件时存在瓶颈。
当 运行 向经优化的持久内存和非持久内存 table 进行大批量插入时,我获得的两者速度相同。向非持久内存优化 table 批量插入的速度不应该比持久内存优化 table 快吗?如果是这样,我在这里做错了什么?
我的测试如下,持续需要大约 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
原来我遇到这个问题是因为批量插入的源文件保存在慢速硬盘上,所以在读取文件时存在瓶颈。