SQL2016 SP1增強In-Memory資料表新增Columnstore效能。
SQL2016新增Columnstore Index至In-Memory資料表相當費時且耗用大量交易紀錄檔,
好消息是SQL2016 SP1快速改善這些問題,這篇簡單測試執行時間和對交易紀錄檔使用率的影響。
create table testColumnstore_Memory
(
id int not null
,sdatetime datetime
,edatetime datetime
,sdate date
,content varchar(300)
,constraint PK_testColumnstore_Memory primary key nonclustered hash(id) with(bucket_count=2000000)
)
with(memory_optimized=on,durability=schema_and_data)
insert into testColumnstore_Memory
select top 2000000 * from testDatetime
checkpoint
--查看目前交易紀錄檔使用空間大小
dbcc sqlperf ('LOGSPACE'); --1.74491 %
go
目前交易紀錄檔使用率1.74491%
--新增Clustered Columnstore
alter table dbo.testColumnstore_Memory
add index testColumnstore_Memory_CCI CLUSTERED COLUMNSTORE;
交易紀錄檔成長約5%,整體花費時間=2039ms、CPU時間=125ms(遠遠低於SQL2016)。
先重新刪除in-Memory資料表後再比較新增Nonclustered Hash Index
--新增nonclustered Hash Index
alter table dbo.testColumnstore_Memory
add index testColumnstore_Memory_NCCI NONCLUSTERED HASH
(id, sdatetime, edatetime, sdate, content)
WITH (BUCKET_COUNT = 2000000);
Note:in-Memory 資料表Clustered Columnstore和Nonclustered Hash無法共存,
目前也不支援Nonclustered Columnstore。
Enjoy SQL Server 2016
參考
SQL Server 2016 Service Pack 1 (SP1) released !!!
[SQL SERVER]SQL2016-Columnstore Indexes增強(4)