HG_STATS_MISSING View

更新时间:
复制 MD 格式

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)

分类

说明

建议操作

column "<列名>" missing

列统计信息缺失

指定列尚未收集统计信息(如MCV、直方图等)。

对该表执行ANALYZE语句,或等待AUTO ANALYZE自动补齐。

column "<列名>" missing hll

列统计信息缺失

指定列的HLL(HyperLogLog)计数器缺失。HLL用于估算分区子表的NDV(不同值数量),在分区表的统计合并中起关键作用。

对该表执行ANALYZE语句,系统将自动生成HLL计数器,或等待AUTO ANALYZE自动补齐。

unable to merge parts

逻辑分区表统计信息无法合并

逻辑分区表存在无法合并统计信息的子分区。可能是部分子分区的统计信息缺失或格式不兼容。

对该分区表及其所有子分区执行ANALYZE语句,或等待AUTO ANALYZE自动补齐。

autovacuum disabled

显式关闭自动收集

该表的AUTO ANALYZE已被手动禁用,因此AUTO ANALYZE不会自动收集统计信息。

如需自动维护统计信息,请重新启用表级的AUTO ANALYZE:ALTER TABLE <表名> SET (autovacuum_enabled = true);

column "<列名>" stats type mismatch: MCV/HISTOGRAM

类型不匹配

指定列已有的MCV(Most Common Values)或直方图(Histogram)统计信息的数据类型与列的当前数据类型不一致。通常发生在列类型被修改之后。

对该表重新执行ANALYZE语句以刷新统计信息,或等待AUTO ANALYZE自动补齐。

relation vanished

表级异常

在检查统计信息的过程中,表已被删除或不可访问。

无需处理。该表已不存在,后续查询将自动忽略。

使用示例

在实例列表中点击实例ID进入实例详情,点击监控信息在分组中选择BinlogAnalyze中查看每个 DB 统计信息缺失的表个数

以其中一个DB为例,查看当前DB中统计信息缺失的表。

image

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 统计信息缺失的表个数指标下降。

image

常见问题

Q:为什么执行HG_STATS_MISSING的条数大于监控指标显示个数?

口径有所差异。

统计信息的缺失分2种:

  1. 行数统计信息+列统计信息全缺失。

  2. 行数有,能用于Plan的基本预估,但是列的详细统计信息缺乏(只影响预估准度)。

(2)的个数 > (1)的个数。

从本文档可以看到,HG_STATS_MISSING的条数,包含了列统计信息缺失的情况,等于(2)的个数。

监控指标每个 DB 统计信息缺失的表个数只显示统计信息完全缺失的个数,等于(1)的个数。

因此,HG_STATS_MISSING的条数 >= 监控指标每个 DB 统计信息缺失的表个数