統計信息日志表(hologres.hg_table_info)用于收集實例中表的相關元數據,包括創建時間、存儲量等信息,以便業務對表做精細化治理。基于hg_table_info表,Hologres提供了表索引診斷功能,通過對表的索引(存儲模式、索引設置)等不同維度的元數據進行診斷,幫助業務更加高效的實現表治理,以提升實例的穩定性和查詢性能。
注意事項
表索引診斷的數據來源于統計信息日志系統表(hologres.hg_table_info),數據T+1更新,頁面默認查詢前一天的數據,不支持查詢當天的數據。
查詢權限的授權方式與hg_table_info表相同,詳情請參見授予查看權限。
操作步驟
您可以通過HoloWeb可視化查看表索引診斷。
登錄HoloWeb控制臺,詳情請參見連接HoloWeb。
單擊頂部導航欄的診斷與優化。
在左側導航欄,選擇實例診斷>表索引診斷。
在表索引診斷頁面頂部,選擇需要診斷的實例所對應的實例名和時間。
單擊提交,即可查看所選實例的DB、Table Group、表(外表、內表)、View的總數,及其他診斷項的結果。
使用介紹和建議
選擇需要診斷的實例后,默認查詢前一天的數據,即可實現表索引的診斷。診斷項和對應的建議如下:
診斷項 | 描述 | 建議 |
每個DB對應的表和View數量 | 展示當前實例,每個DB內的內部表、分區子表、外部表及View的總量。 | 建議對表數量較多的DB進行針對性治理。 |
每個TG對應的內表數量 | 展示每個Table Group的內部表數量(包括分區子表)。 |
|
分區表數和存儲量 | 展示當前實例中分區表對應的分區子表和存儲量。 |
|
存儲為0的表 | 展示當前熱存和冷存都為0的表。 | 建議及時清理存儲為0的表,以減少Meta內存的占用。 |
Segment格式的表 | 展示當前實例中所有采用Segment格式存儲的表。從V2.0版本開始,Hologres將不再支持Segment格式的表,需要手動將表轉換為壓縮算法更高效的ORC格式,在節約存儲成本的同時,也可能帶來性能的提升。如果不轉換為ORC格式,將無法升級實例到V2.0及以上版本。轉換操作請參見更改列存表的數據存儲格式。 重要 轉換表格式的實例版本必須為V1.3最新版本(大于或等于V1.3.6x),否則可能會導致轉換失敗,影響實例正常運行。 | 無。 |
行存表 | 展示當前實例所有的行存表。 |
|
行列共存表 | 展示當前實例所有的行列共存表。 | 行列共存表適合所有的應用場景,但是存儲會翻倍,請謹慎使用。詳情請參見行列共存。通過如下SQL查找某個行列共存表設計的Query。
|
沒有設置主鍵(PK)的行存表 | 行存表僅用于基于主鍵的查詢,必須創建主鍵才會有效果。 |
|
行存表Distribution key和Clustering key不一致的表 | 必須將行存表的Distribution key和Clustering key設置為相同字段,否則會帶來額外的查詢開銷,降低查詢性能。 |
|
超過300列的列存表 | 列存表不建議超過300列,列越多,性能開銷越大。詳情請參見使用建議。 | |
超過300列的行列共存表 | 行列共存表不建議超過300列,列越多,性能開銷越大。詳情請參見使用建議。 | |
超過300列的行存表 | 行存表不建議超過300列,列越多,性能開銷越大。詳情請參見使用建議。 | |
Distribution key超過3列的表 | Distribution key用于決定數據的分布,尤其在Join場景中,合適的Distribution key可以實現Local Join,減少數據Shuffle,但Distribution key設置越多,使用場景越受限,建議控制在3列以內。詳情請參見分布鍵Distribution Key。 | |
Clustering key超過3列的表 | Clustering key可以實現數據在文件內排序,常用于Range和范圍過濾的場景,具有左匹配原則,不建議設置超過3列,否則命中索引的場景會受限。詳情請參見聚簇索引Clustering Key。 | |
Segment key超過3列的表 | Segment key用于劃分文件邊界,常用于時間戳等單調遞增或遞減的字段過濾查詢,具有左匹配原則,不建議設置超過3列,否則命中索引的場景會受限。詳情請參見Event Time Column(Segment Key)。 | |
Clustering key列為nullable的表 | Clustering key可以實現數據在文件內排序,常用于Range過濾,不建議將字段屬性設為Nullable,否則無法使用加速效果。詳情請參見聚簇索引Clustering Key。 | 重新建表,并將設置Clustering key的字段屬性設為NOT NULL。 |
Segment key列為nullable的表 | Segment key用于劃分文件邊界,常用于時間戳等單調遞增或遞減的字段過濾查詢,不建議將字段屬性設為Nullable,否則無法使用加速效果。詳情請參見Event Time Column(Segment Key)。 | 重新建表,并將設置Segment key的字段屬性設為NOT NULL。 |
表數據TTL小于7天的表 | 表數據TTL可用于管理數據的生命周期,數據會在超過TTL后被清除,但TTL不會嚴格保證數據刪除的時間,而是會在過期后的某個時間刪除數據。當TTL設置的時間越短,數據刪除的時間也會越快。因此建議TTL不小于7天,否則可能會導致數據重復、數據被誤刪除等問題。詳情請參見SQL命令列表。 |
|
列出所有開了Binlog的表 | 開啟Binlog后,會有額外的存儲開銷,同時也建議行存表、行列共存表開啟Binlog,若列存表開啟Binlog,性能開銷較大。詳情請參見訂閱Hologres Binlog。 |
|
Binlog TTL大于7天的表 | Hologres Binlog記錄了表的DML記錄,Binlog的TTL越長,保留的記錄越多,帶來的存儲開銷也越多,建議TTL保留在7天內。 | 對于Binlog TTL較長的表,使用如下語句將Binlog的TTL修改為一個較小的值。
|