功能
information_schema.PERSIST_RANGE_CACHE 用于查看实例持久化范围统计缓存中的内容。TDSQL Boundless 的查询优化器在生成执行计划时,会基于"范围统计(Range Statistics)"对索引扫描的行数进行估算。
PERSIST_RANGE_CACHE 视图展示这部分统计数据中已被持久化保存、可在节点重启后自动恢复的部分,可帮助您:查看实例当前已持久化的范围统计信息。
验证节点重启后范围统计是否成功恢复。
与内存版视图
RANGE_CACHE 对比,确认两者的一致性。适用版本
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 | 该索引在范围统计缓存中的累计未命中次数,可用于评估缓存命中率。 |
RANGE_CACHE_SAMPLE_ROWS | bigint unsigned | 最近一次完整重建该索引范围统计时采样得到的总行数,用于全表行数估算。 |
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_CACHE:当前节点内存中缓存的 range 统计信息。PERSIST_RANGE_CACHE:已持久化保存,全量的,可在节点重启后自动恢复的 range 统计信息。内存中缓存的 range 统计信息,受限于 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 统计信息后的极短时间内),稍后再次执行即可。