SQL Server導入性能對比(3)——In-Memory搭配聚集列存儲索引

接上文SQL Server導入性能對比(2)——非聚集列存儲索導入,本文測試In-Memory搭配聚集列存儲索引的導入性能。

環境準備

  先創建測試表,in-memory需要數據庫開啓“MEMORY_OPTIMIZED_DATA”並且添加專用文件組:

use master;
GO

ALTER DATABASE [ContosoRetailDW] 
	ADD FILEGROUP [ContosoRetailDW_Hekaton] 
	CONTAINS MEMORY_OPTIMIZED_DATA
GO

ALTER DATABASE [ContosoRetailDW]
	ADD FILE(NAME = ContosoRetailDW_HekatonDir, 
	FILENAME = '/var/opt/mssql/data/xtp') 
	TO FILEGROUP [ContosoRetailDW_Hekaton];

GO
USE [ContosoRetailDW]
go

CREATE TABLE [dbo].[FactOnlineSales_Hekaton](
     [OnlineSalesKey] [int] NOT NULL,
     [StoreKey] [int] NOT NULL,
     [ProductKey] [int] NOT NULL,
     [PromotionKey] [int] NOT NULL,
     [CurrencyKey] [int] NOT NULL,
     [CustomerKey] [int] NOT NULL,
     Constraint PK_FactOnlineSales_Hekaton PRIMARY KEY NONCLUSTERED ([OnlineSalesKey]),
     INDEX IX_FactOnlineSales_Hekaton_NCCI Clustered Columnstore
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

  in-memory需要比較多的內存,所以需要修改一下,在Linux上需要先到OS層配置,這裏改成10G:

~$ sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 10240

  這個操作需要重啓服務,不過實驗環境沒所謂,重啓一下。
在這裏插入圖片描述
  另外內存表不支持truncate table,需要使用delete from 命令來刪除數據。
  最後把兼容級別改回140。

實驗

  下面開始導入,這次同樣還是500萬數據,因爲1000萬數據對我的服務器來說還是相對較大:

set statistics time, io on;
 
insert into [dbo].[FactOnlineSales_Hekaton] 
                        (
                        OnlineSalesKey, StoreKey, ProductKey, PromotionKey, CurrencyKey, CustomerKey
                        ) 
 
select distinct top 5000000  OnlineSalesKey,  store.StoreKey, sales.ProductKey, PromotionKey, CurrencyKey, CustomerKey 
  FROM [dbo].[FactOnlineSales] sales
        inner join dbo.DimProduct prod
                                on sales.ProductKey = prod.ProductKey
        inner join dbo.DimStore store
                                on sales.StoreKey = store.StoreKey
  where prod.ProductSubcategoryKey >= 10
                        and store.StoreManager >= 30
  option (recompile);

  從時間上來看,並沒有明顯增加。
在這裏插入圖片描述

  從執行計劃來看,沒有並行,由於內存表並不支持WITH TABLOCK,所以沒辦法測試。
在這裏插入圖片描述

總結

  經過這三篇文章的測試:SQL Server導入性能對比(1)——WITH TABLOCK並行導入
SQL Server導入性能對比(2)——非聚集列存儲索導入
和本文可以看出,即使數據理不相同,也可以看出,使用WITH TABLOCK的性能最好。當然後面可能會有更多的新特性來提升。另外即使本身不支持,其他的外部工具也可以提升導入數據。
  最後,數據導入的性能始終會到達天花板,不過隨着大數據的發展,數據的計算並不需要總是移動數據,只需要移動計算到數據上面就可以了。所以我後續也會關注一下其他方式來實現數據的快速加載。
  由於時間關係,還沒有測試分區的性能,因爲分區和內存表目前還不兼容,所以暫時不打算測試,有空的時候我也會測試一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章