统计信息日志表(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修改为一个较小的值。
|