一、功能
·查看实例当前已持久化的范围统计信息。
·验证节点重启后范围统计是否成功恢复。
·与内存版视图 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 统计信息后的极短时间内),稍后再次执行即可。