TDSQL Boundless PERFORMANCE_SCHEMA

information_schema.PERSIST_RANGE_CACHE 用于查看实例持久化范围统计缓存中的内容。TDSQL Boundless 的查询优化器在生成执行计划时,会基于”范围统计(Range Statistics)”对索引扫描的行数进行估算。PERSIST_RANGE_CACHE 视图展示这部分统计数据中已被持久化保存、可在节点重启后自动恢复的部分,可帮助你。

相关产品
TDSQL Boundless 产品页,含版本规格、价格与购买入口。

一、功能

·查看实例当前已持久化的范围统计信息。

·验证节点重启后范围统计是否成功恢复。

·与内存版视图 RANGE_CACHE 对比,确认两者的一致性。

持久化范围统计功能由系统变量 range_stat_persist_cache 控制,默认开启。开启后,范围统计信息会被持久化到独立的 RocksDB Column Family 中,节点重启后可自动恢复,无需重新采样。如需关闭该功能,可执行 SET GLOBAL range_stat_persist_cache = OFF。

二、适用版本

TDSQL Boundless 内核版本21.2.6及以上。

三、字段说明

PERSIST_RANGE_CACHE 视图各字段的含义如下表所示:

字段名 类型 描述
TABLE_SCHEMA varchar(192) 该范围统计所属表的库名。
TABLE_NAME varchar(192) 该范围统计所属表的表名。
INDEX_NAME varchar(192) 该范围统计所属索引名;主键统计显示为 PRIMARY。
RANGE_CACHE_MISS bigint unsigned 该字段在 PERSIST_RANGE_CACHE 视图中恒为 0。缓存未命中次数仅对内存版视图 RANGE_CACHE 有意义,持久化层不跟踪实时缓存命中情况。
RANGE_CACHE_SAMPLE_ROWS bigint unsigned 最近一次完整重建该索引范围统计时,每个采样 SST 数据块的平均行数(采样总行数 / 采样次数 + 1),用于全表行数估算。
RANGE_CACHE_REFILL_TS bigint unsigned 最近一次该索引整体重建范围统计的时间戳,已格式化为 YYYYMMDDhhmmss 形式的可读数值。
START_KEY varchar(192) 该范围的起始键(可读字符串形式)。
END_KEY varchar(192) 该范围的结束键(可读字符串形式)。
RANGE_ROWS bigint unsigned 该范围 (START_KEY, END_KEY] 内的预估行数。
RANGE_ACC_ROWS bigint unsigned 累计行数估算:从该索引最小键起累加至 END_KEY 的总预估行数,用于跨范围的累加估算。
RANGE_TIMESTAMP bigint unsigned 该具体范围统计生成的时间戳,已格式化为 YYYYMMDDhhmmss 形式的可读数值。

注意:说明:

注意:PERSIST_RANGE_CACHE 与 RANGE_CACHE 的列结构完全一致,区别仅在于数据来源:

四、注意事项

·持久化范围统计功能由系统变量 range_stat_persist_cache 控制,默认为开启状态(ON)。可通过 SET GLOBAL range_stat_persist_cache = OFF 动态关闭,关闭后不会写入新的持久化记录,但已有的持久化数据仍然保留。

·执行 DDL 操作(如 DROP TABLE、TRUNCATE TABLE、DROP INDEX、DROP PARTITION)时,系统会自动清理对应的持久化范围统计数据。若清理因存储引擎写入停滞而失败,系统会在后台异步重试,不影响 DDL 操作的执行。

·PERSIST_RANGE_CACHE 视图中的 RANGE_CACHE_MISS 字段恒为 0,该字段仅在内存版视图 RANGE_CACHE 中有实际意义。

五、示例 1:查询某张表的持久化范围统计

SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, START_KEY, END_KEY, RANGE_ROWS, RANGE_ACC_ROWS, RANGE_TIMESTAMPFROM information_schema.PERSIST_RANGE_CACHEWHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'your_table'ORDER BY INDEX_NAME, START_KEY;

六、示例 2:对比内存与持久化范围统计的一致性

一般情况下,内存中的所有 range 统计信息都能在持久化层中找到其对应记录。下面这条 SQL 用于校验一致性,期望返回空结果集:

SELECT *FROM information_schema.RANGE_CACHEWHERE CONCAT(START_KEY, ' ', END_KEY) NOT IN ( SELECT CONCAT(START_KEY, ' ', END_KEY) FROM information_schema.PERSIST_RANGE_CACHE);

如果出现非空结果,说明该范围尚未完成持久化(通常发生在重新获取 range 统计信息后的极短时间内),稍后再次执行即可。

赞 (0)
上一篇 4天前
下一篇 4天前