一、功能
TDSQL Boundless 存储引擎采用多列族(Multi-CF)架构,不同类型的数据分别写入独立的列族。每个列族拥有独立的 Memtable 和 LSM 层级结构,主要记录以下触发 Flush 的场景,会将 Memtable 中的数据落盘为 SST 文件:
·后台周期性触发。
·分裂合并任务触发。
·手动触发。
频繁的 Flush 可能会产生较多体积较小的 SST 文件,进而增加 L0 层文件数量,带来读放大和 Compaction 压力。该视图按节点和列族维度统计各类 Flush 的触发次数,帮助你定位 SST 小文件堆积、写入毛刺等问题背后的具体原因。
二、适用版本
TDSQL Boundless V21.6.4.0 及以上版本。
三、字段说明
TDSTORE_SNAPSHOT_FLUSH_INFO 视图各字段的含义如下表所示:
| 字段名 | 类型 | 描述 |
| NODE_NAME | varchar(64) | 该行统计所属的存储节点名称。 |
| CF_NAME | varchar(64) | 该行统计对应的列族(Column Family)名称。 |
| CF_ID | bigint unsigned | 该列族对应的内部 ID。 |
| SNAPSHOT_FLUSH_COUNT | bigint unsigned | 保存快照触发的 Flush 次数。 |
| PERIODIC_FLUSH_COUNT | bigint unsigned | 后台周期性触发的 Flush 次数。 |
| FORCE_FLUSH_COUNT | bigint unsigned | 手动触发的 Flush 次数。 |
| SPLIT_MERGE_FLUSH_COUNT | bigint unsigned | RG 分裂合并任务触发的 Flush 次数。 |
| OTHER_FLUSH_COUNT | bigint unsigned | 除上述几类以外,其他原因触发的 Flush 次数。 |
| LAST_FLUSH_UNIX_MS | bigint unsigned | 该列族最近一次 Flush 的发生时间,为 Unix 时间戳,单位为毫秒。 |
| LAST_FLUSH_REASON | varchar(64) | 该列族最近一次 Flush 的具体触发原因。 |
| LAST_L0_FILE_COUNT | bigint unsigned | 该列族最近一次 Flush 完成后,L0 层的文件数量。 |
四、示例 1:查看集群内各节点、各列族的 Flush 触发原因统计
SELECT NODE_NAME, CF_NAME, SNAPSHOT_FLUSH_COUNT, PERIODIC_FLUSH_COUNT, FORCE_FLUSH_COUNT, SPLIT_MERGE_FLUSH_COUNT, OTHER_FLUSH_COUNTFROM information_schema.TDSTORE_SNAPSHOT_FLUSH_INFO;
五、示例 2:定位快照安装触发 Flush 次数最多的列族
SELECT NODE_NAME, CF_NAME, SNAPSHOT_FLUSH_COUNT, LAST_L0_FILE_COUNTFROM information_schema.TDSTORE_SNAPSHOT_FLUSH_INFOORDER BY SNAPSHOT_FLUSH_COUNT DESCLIMIT 10;
六、示例 3:查看某个列族最近一次 Flush 的具体信息
SELECT NODE_NAME, CF_NAME, LAST_FLUSH_REASON, FROM_UNIXTIME(LAST_FLUSH_UNIX_MS / 1000) AS LAST_FLUSH_TIME, LAST_L0_FILE_COUNTFROM information_schema.TDSTORE_SNAPSHOT_FLUSH_INFOWHERE CF_NAME = 'cf_1';
七、注意事项
·若怀疑 L0 层小文件堆积、写入延迟升高等问题与快照安装有关,可结合该视图中 SNAPSHOT_FLUSH_COUNT 与 LAST_L0_FILE_COUNT 的变化趋势进行排查,判断是否为快照安装频繁触发 Flush 所致。
·该视图仅提供统计计数,不提供每次 Flush 的详细历史记录。