Index

為什麼我的列儲存索引沒有填滿整個行組?

  • June 19, 2017

[vColumnstoreDensity]用來監控列儲存索引的執行狀況。

我注意到我有一個看起來很奇怪的索引。

據我了解,列儲存索引將在開始下一個行組之前填充一個行組。為了獲得最佳索引性能,更完整的行組更好。

說了這麼多,我有一張我無法理解的桌子。即使在使用最大資源類(為建構過程提供盡可能多的記憶體)重建索引之後,[vColumnstoreDensity]視圖仍然顯示該索引分佈在許多部分完整的行組中。

COMPRESSED_rowgroup_count

4936

COMPRESSED_rowgroup_rows

2693512978

COMPRESSED_rowgroup_rows_MIN

468

COMPRESSED_rowgroup_rows_MAX

739443

COMPRESSED_rowgroup_rows_AVG

545687

編輯:

這是一個聚集列儲存索引。

當列儲存組被“剪切”時,會觸發一個擴展事件,我認為該事件是column_store_index_build_process_segment. 此事件將有一個“修剪”原因,您應該尋找兩個可能的修剪原因:

  • 記憶體(對於您的情況不太可能),如果索引建構沒有足夠的記憶體來建構一個段。
  • 字典大小(可能的原因),如果用於對列段中的數據進行編碼的字典達到最大大小(16Mb),就會發生這種情況。

當然,要擷取此事件,您需要在索引建構期間設置 XE 會話(連結的文章顯示瞭如何)。

您還可以查看建構後的工件,特別是字典,並查看與小段關聯的輔助字典是否已經全尺寸 (16Mb)。這將表明修剪的可能原因是完整的字典。

引用自:https://dba.stackexchange.com/questions/176646