SQL Server 列存儲索引性能總結(2)——獲取元數據信息

接上文:SQL Server 列存儲索引性能總結(1)——環境準備及簡介, 本文介紹怎麼獲取和解讀元數據信息,以便後續演示過程能知道內幕技術,也可以方便在日常工作中的TroubleShooting。

環境準備

   我們先創建一些環境,然後一邊演示一邊介紹,爲了不受示例數據庫的影響,這次在TempDB上面運行。
   創建測試表加聚集列存儲索引,然後循環插入240萬行數據:

--use TempDB
create table dbo.CCTest(
	id int not null,
	name varchar(50) not null,
	lastname varchar(50) not null );
GO

-- Creating  Clustered Columnstore Index
create clustered columnstore index CCL_CCTest
	on dbo.CCTest;
GO

-- Insert 2.4 million rows
declare @i as int;
declare @max as int;
select @max = isnull(max(id),0) from dbo.CCTest;
set @i = 1;

begin tran
while @i <= 2400000
begin
	insert into dbo.CCTest
		( id, name, lastname )
		values
		( @max + @i, 'SomeName_', 'SomeLastName_' );

	set @i = @i + 1;
end;
commit;

   然後檢查一下元數據信息:

select * from sys.column_store_dictionaries;
select * from sys.column_store_segments;
select * from sys.column_store_row_groups; 

在這裏插入圖片描述
   在完成insert之後,前兩個DMVs顯示爲空,而第三個也就是row groups顯示有數據。因爲這個時候創建了3個Delta Stores(每個1048576行),其中兩個爲CLOSED,有一個爲OPEN,因爲還沒填滿。這個時候Tuple Mover還沒觸發(5分鐘一次),所以還沒有創建片段來編碼和壓縮這些數據。
   當你等得足夠久(超過5分鐘),那麼前兩個DMV都會有數據。
   前面提到,可以通過重組表或聚集列存儲索引來觸發Tuple Mover或者重建整個表:

alter table dbo.CCTest rebuild;
GO

-- 重新查詢
select * from sys.column_store_dictionaries;
select * from sys.column_store_segments;
select * from sys.column_store_row_groups; 

在這裏插入圖片描述
   針對上面的結果做個解釋:
   第一個結果有兩行,也就是兩個Dictionaries,與第二三列關聯,這兩列都是varchar類型,type=3代表使用string值,每個dictionaries只有1 個entry,因爲我們插入的值都是相同的。
   第二個結果,也就是sys.column_store_segments,拉到最後看size,可以看到第一列(column_id=1)和後面兩列字符型的佔用空間完全不一樣,這也說明了字符型數據的壓縮率遠高於數值型。
   第三個結果,sys.column_store_row_groups,有三個delta store,都是compressed意味着已經變成了列存儲的片段。因爲觸發了Tuple Mover,所以第三個本來沒滿的也變成了壓縮。
   接下來再插入10萬數據:

declare @i as int;
declare @max as int;
select @max = isnull(max(id),0) from dbo.CCTest;
set @i = 1;

begin tran
while @i <= 100000
begin
	insert into dbo.CCTest( id, name, lastname )
		values( @max + @i, 'SomeName_', 'SomeLastName_' );

	set @i = @i + 1;
end;
commit;

-- 再次查詢
select * from sys.column_store_row_groups;

在這裏插入圖片描述
   由於沒有任何已經open的Delta store,所以這個時候SQL Server新開一個Delta store來存儲10萬數據。接下來再跑一下這10萬數據的insert腳本,你會看到沒有新增的Delta Store,因爲沒有達到上限。
在這裏插入圖片描述

小結

   本文介紹了3個DMV和怎麼看裏面的數據,但是介紹比較簡單,後面的文章會逐步深入。接下來我們看看關於鎖的問題。

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