高级诊断用于收集集群中表的相关元数据,包括创建时间、存储量等信息,以便业务对表做精细化治理。ByteHouse 还提供了表索引诊断功能,通过对表的索引(存储模式、索引设置)等不同维度的元数据进行诊断,帮助您更加高效地实现表治理,以提升实例的稳定性和查询性能。该功能适用于日常表治理、查询性能优化、资源管控等场景。本文介绍了高级诊断功能概况及如何使用高级诊断。
高级诊断功能统计了 system.optimizer_statistics、system.optimizer_statistics_paritioned_ha、system.data_skipping_indices、system.tables 等信息日志表中的内容,以收集集群中数据表的相关元数据,用于诊断表的数量分布、存储占用、表结构合理性、索引有效性,支持展示以下诊断项:
诊断项 | 说明 | 使用建议 |
|---|---|---|
每个 Database 对应的 Table 和 View 数量 | 按数据库维度统计包含的物理表(Table)和视图(View)数量,清晰展示实例的表结构分布。 | 可用于识别 “表数量过多的数据库”,避免单库元数据过载,优化数据库拆分策略。 |
分区表数和存储量 | 统计所有分区表的总数量,及分区表占用的总存储量。 | 可用于定位占用存储较高的分区表,结合业务场景清理历史分区,减少无效存储占用。 |
非分区表数和存储量 | 统计所有非分区表的总数量,及非分区表占用的总存储量。 | 可用于识别占用存储较高的非分区表,评估是否需要转为分区表(如按时间分区),提升查询时的数据过滤效率。 |
存储为 0 的表 | 统计 “数据存储量为 0” 的表(可能为新建空表、数据已过期清理的表)。 | 可用于清理无效空表,减少元数据冗余,降低实例元数据管理压力。 |
超过 300 列的表 | 统计字段数量超过 300 列的宽表。 | 可用于识别宽表。宽表易导致查询时 “不必要字段扫描”,可通过识别宽表,拆分此类表,提升查询性能。 |
Order by 超过 3 列的表 | 统计 | 可用于识别存在过多 |
Shard key 超过 3 列的表 | 统计 | 可用于识别存在过多 |
表数据 TTL 小于 7 天的表 | 统计数据过期时间(TTL)小于 7 天的表。 | 可用于识别数据过期时间较短的表,避免频繁清理影响查询稳定性,或因 TTL 过短导致数据提前丢失。 |
表 Skipping index | 统计所有表的 Skipping Index(如 MinMax、Set、Bloom Filter 等)类型、关联字段及启用状态。 | 可用于查看表中已有的 skipping index,判断是否存在 “无效索引”(如索引字段未用于查询过滤)或 “缺失关键索引”(如高频过滤字段未建索引),优化索引配置以减少数据扫描量。 |