Index
為什麼我的列儲存索引沒有填滿整個行組?
我
[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)。這將表明修剪的可能原因是完整的字典。