HOLOGRES_STATISTIC.HG_STATS_MISSING视图用来展示当前Database中缺失统计信息的表。
使用这些信息,可以帮助您:
查看缺失统计信息的表。缺失统计信息,可能会导致执行计划不佳,例如Join Order反序,造成大表Shuffle,带来计算慢、OOM等问题。
查看Hologres监控指标中,每个 DB 统计信息缺失的表个数指标对应的具体表明细。
有选择地,对缺失统计信息的表,进行手动ANALYZE等治理。
使用限制
您的Hologres实例版本必须在V2.2.15及以上。
查询者只能查到自己有SCHEMA USAGE权限(及以上)的Schema下的表。
不支持显示除Holo单表、分区表、外表和物化视图以外的表类型(也不会显示在指标里)。
字段介绍
HOLOGRES_STATISTIC.HG_STATS_MISSING视图的字段和描述如下:
列名 | 数据类型 | 描述 |
schemaname | TEXT | Schema Name |
tablename | TEXT | Table Name |
nattrs | INTEGER | 列的个数 |
tablekind | TEXT | Table种类(table, foreign_table等) |
fdwname | TEXT | 外表的Foreign Data Wrapper名 |
autovacuum_enabled | TEXT | 是否开启Auto Analyze。 说明 仅V3.1版本支持该字段。 |
reason | TEXT | 统计信息缺失的原因,您可以根据原因进行下一步处理。 说明 仅V3.1版本支持该字段。 |
reason 缺失原因的分类
原因(reason) | 分类 | 说明 | 建议操作 |
| 列统计信息缺失 | 指定列尚未收集统计信息(如MCV、直方图等)。 | 对该表执行 |
| 列统计信息缺失 | 指定列的HLL(HyperLogLog)计数器缺失。HLL用于估算分区子表的NDV(不同值数量),在分区表的统计合并中起关键作用。 | 对该表执行 |
| 逻辑分区表统计信息无法合并 | 逻辑分区表存在无法合并统计信息的子分区。可能是部分子分区的统计信息缺失或格式不兼容。 | 对该分区表及其所有子分区执行 |
| 显式关闭自动收集 | 该表的AUTO ANALYZE已被手动禁用,因此AUTO ANALYZE不会自动收集统计信息。 | 如需自动维护统计信息,请重新启用表级的AUTO ANALYZE: |
| 类型不匹配 | 指定列已有的MCV(Most Common Values)或直方图(Histogram)统计信息的数据类型与列的当前数据类型不一致。通常发生在列类型被修改之后。 | 对该表重新执行 |
| 表级异常 | 在检查统计信息的过程中,表已被删除或不可访问。 | 无需处理。该表已不存在,后续查询将自动忽略。 |
使用示例
在实例列表中点击实例ID进入实例详情,点击监控信息在分组中选择Binlog和Analyze中查看每个 DB 统计信息缺失的表个数。
以其中一个DB为例,查看当前DB中统计信息缺失的表。
SELECT * FROM hologres_statistic.hg_stats_missing;返回结果如下。
schemaname | tablename | nattrs | tablekind | fdwname | autovacuum_enabled | reason
------------------------------------+----------------------------------+--------+---------------+----------+--------------------+------------------------------
hologres_foreign_dataset_tpch_100g | odps_customer_100g | 8 | foreign table | odps_fdw | t | column "c_custkey" missing
hologres_foreign_dataset_tpch_100g | odps_nation_100g | 4 | foreign table | odps_fdw | t | column "n_nationkey" missing
hologres_foreign_dataset_tpch_100g | odps_orders_100g | 9 | foreign table | odps_fdw | t | column "o_orderkey" missing
hologres_foreign_dataset_tpch_100g | odps_part_100g | 9 | foreign table | odps_fdw | t | column "p_partkey" missing
hologres_foreign_dataset_tpch_100g | odps_lineitem_100g | 16 | foreign table | odps_fdw | t | column "l_orderkey" missing
public | spatialxxxxx | 5 | table | | t |
public | smtxxx | 4 | foreign table | oss_fdw | t |
public | smtxxxxx | 4 | foreign table | oss_fdw | t | 此时可以对缺失统计信息的表手动执行ANALYZE。
ANALYZE spatialxxxxx;重新回到监控页面,发现每个 DB 统计信息缺失的表个数指标下降。
常见问题
Q:为什么执行HG_STATS_MISSING的条数大于监控指标显示个数?
口径有所差异。
统计信息的缺失分2种:
行数统计信息+列统计信息全缺失。
行数有,能用于Plan的基本预估,但是列的详细统计信息缺乏(只影响预估准度)。
(2)的个数 > (1)的个数。
从本文档可以看到,HG_STATS_MISSING的条数,包含了列统计信息缺失的情况,等于(2)的个数。
监控指标每个 DB 统计信息缺失的表个数只显示统计信息完全缺失的个数,等于(1)的个数。
因此,HG_STATS_MISSING的条数 >= 监控指标每个 DB 统计信息缺失的表个数。