
StarRocks fe_tablet_schedules 系统表详解通过 information_schema 监控 Tablet 调度任务【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocksfe_tablet_schedules是 StarRocks 前端 FEFrontend节点上的一张 information_schema 系统表记录了 FE 中 Tablet数据分片调度任务的全量信息。当你需要排查副本修复REPAIR与数据均衡BALANCE为何迟迟未完成、定位 Clone 任务失败原因、评估集群数据迁移进度时查询这张表是最直接的手段。读完本文你将掌握该表全部字段的语义、各状态与优先级的含义并结合源码理解调度任务的生命周期能够编写出实用的诊断查询。表的作用与适用场景在 StarRocks 中Tablet 是数据存储与复制的基本单元。FE 上的 TabletScheduler 负责两类核心调度任务REPAIR修复当某个 Tablet 的副本数不足、副本损坏或 BE 节点下线导致副本缺失时调度器自动创建新副本以恢复冗余BALANCE均衡当集群中各 BE 节点或磁盘的负载不均时调度器在 BE 之间搬迁副本使数据分布趋于均衡。fe_tablet_schedules将调度器中每个任务的实时状态暴露为一张可查询的关系表用户无需访问 FE 的 HTTP 调试接口直接用 SQL 即可观察调度进度、失败次数与 Clone 速率适用于以下场景节点扩容/缩容后确认数据重分布是否按预期推进BE 宕机后检查副本修复任务的状态与报错信息诊断磁盘倾斜问题定位 BALANCE 任务是否停滞或被反复调度失败。从源码看该表由 FeTabletSchedulesSystemTable 注册为Table.TableType.SCHEMA类型的内置系统表底层对接 thrift 类型TSchemaTableType.SCH_FE_TABLET_SCHEDULES其数据由 FE 的 Tablet 调度模块实时填充。查询方式该表位于information_schema数据库下按 FE 节点维度展示当前调度器中的任务快照基本查询语句如下SELECT * FROM information_schema.fe_tablet_schedules;若要按任务类型或状态过滤SELECT TABLET_ID, TYPE, STATE, PRIORITY, SRC_BE_ID, DEST_BE_ID, VISIBLE_VERSION, COMMITTED_VERSION, CLONE_BYTES, CLONE_RATE, MSG FROM information_schema.fe_tablet_schedules WHERE TYPE REPAIR AND STATE ! FINISHED ORDER BY CREATE_TIME DESC;需要说明的是该表反映的是调度器当前正在跟踪的任务集合任务创建后进入表中执行成功FINISHED或最终失败被移除后对应记录会随之消失。因此单次查询看到的多为未完成任务的快照持续采样才能完整观察任务生命周期。字段说明fe_tablet_schedules提供以下字段字段类型说明TABLET_IDBIGINTTablet 的 ID。TABLE_IDBIGINTTablet 所属表的 ID。PARTITION_IDBIGINTTablet 所属分区的 ID。TYPEVARCHAR任务类型取值为REPAIR修复或BALANCE均衡。STATEVARCHAR任务当前状态取值见下文任务状态小节。SCHEDULE_REASONVARCHAR触发该任务调度的原因。MEDIUMVARCHARTablet 所在的存储介质如 HDD/SSD。PRIORITYVARCHAR任务当前动态优先级。ORIG_PRIORITYVARCHAR任务创建时的原始优先级。LAST_PRIORITY_ADJUST_TIMEDATETIME任务优先级最近一次被调整的时间。VISIBLE_VERSIONBIGINTTablet 的可见数据版本对外可查询版本。COMMITTED_VERSIONBIGINTTablet 的已提交数据版本已写入但尚未对查询可见的版本。SRC_BE_IDBIGINT源副本所在 BE 节点的 ID。SRC_PATHVARCHAR源副本所在的数据目录路径。DEST_BE_IDBIGINT目标副本所在 BE 节点的 ID。DEST_PATHVARCHAR目标副本所在的数据目录路径。TIMEOUTBIGINT任务超时时间毫秒由源码中的 Clone 任务超时逻辑设置。CREATE_TIMEDATETIME任务创建时间。SCHEDULE_TIMEDATETIME任务开始调度执行的时间。FINISH_TIMEDATETIME任务完成时间。CLONE_BYTESBIGINTClone 过程已复制的字节数。CLONE_DURATIONDOUBLEClone 过程耗时秒。CLONE_RATEDOUBLEClone 速率MB/s。FAILED_SCHEDULE_COUNTINT任务调度失败次数。FAILED_RUNNING_COUNTINT任务执行运行失败次数。MSGVARCHAR任务调度与执行过程中的信息/错误提示。提示官方文档表格未列出TIMEOUT字段但源码 FeTabletSchedulesSystemTable.java 中实际定义了TIMEOUTBIGINT列查询时可直接使用其值对应 TabletSchedCtx.java 中依据Config.min_clone_task_timeout_sec/Config.max_clone_task_timeout_sec估算的任务超时时间。任务类型与调度原因TYPE字段只有两个取值与源码 TabletSchedCtx.Type 一一对应TYPE含义典型触发场景REPAIR副本修复副本数低于复制因子、BE 宕机/下线、副本校验失败、建表初始副本创建等BALANCE数据均衡各 BE 或磁盘负载不均、节点扩容后触发数据重分布SCHEDULE_REASON记录触发调度的具体原因例如副本缺失、节点间负载差异等可作为筛选与统计维度用于回答集群里为什么有这么多调度任务这类问题。任务状态STATE与优先级PRIORITYSTATE反映任务在调度器中的生命周期对应源码 TabletSchedCtx.State 枚举STATE含义PENDING任务已入队尚未开始调度执行RUNNING任务正在调度执行中如 Clone 进行中FINISHED任务已成功完成CANCELLED任务失败被取消TIMEOUT任务执行超时UNEXPECTED其他未预期错误EXPIREDTablet 即将被删除任务随之失效PRIORITY与ORIG_PRIORITY的取值来自 TabletSchedCtx.Priority 枚举共四档LOWNORMALHIGHVERY_HIGH理解这两个字段需要把握调度器的优先级机制源码注释见 TabletSchedCtx.javaORIG_PRIORITY是任务加入调度队列时设定的原始优先级PRIORITY即源码中的动态优先级在调度过程中根据失败次数动态调整且永远不会高于原始优先级调度器内部的优先队列按动态优先级排序当任务反复调度失败时FAILED_SCHEDULE_COUNT增加动态优先级会被上调如LOW→HIGHLAST_PRIORITY_ADJUST_TIME记录最近一次调整时间。这也是定位某个 Tablet 长期修复不成功的关键线索优先级持续抬高、失败计数持续增长说明存在系统性的调度障碍。Clone 进度与失败诊断对于RUNNING状态的 REPAIR 任务最关心的就是数据复制Clone的进度与健康度SRC_BE_ID/SRC_PATH数据来源副本所在的 BE 与其数据目录路径DEST_BE_ID/DEST_PATH新副本将要落地的 BE 与其数据目录路径CLONE_BYTES、CLONE_DURATION、CLONE_RATE分别表示已复制字节数、耗时秒与速率MB/s。结合CREATE_TIME、SCHEDULE_TIME、FINISH_TIME可还原任务的完整时间线VISIBLE_VERSION与COMMITTED_VERSION反映 Tablet 数据版本推进情况Clone 任务会尽量在版本一致的前提下完成两个版本长期不前进通常意味着写入或同步异常。FAILED_SCHEDULE_COUNT调度失败次数与FAILED_RUNNING_COUNT执行失败次数是两个重要的健康指标。在源码中调度失败会抬高动态优先级以争取更多调度机会而执行失败次数达到阈值TabletSchedCtx.java 中RUNNING_FAILED_COUNTER_THRESHOLD 3即运行失败超过 3 次后任务会被从调度器中移除。因此若某任务的FAILED_RUNNING_COUNT持续增大直至消失说明该 Tablet 的修复已被放弃需要结合MSG字段中的错误信息进一步排查源端 BE 状态、磁盘空间或网络问题。实用诊断示例1. 查看当前所有未完成的调度任务数量按类型和状态分组SELECT TYPE, STATE, COUNT(*) AS cnt FROM information_schema.fe_tablet_schedules GROUP BY TYPE, STATE ORDER BY cnt DESC;2. 定位反复失败、修复困难的 TabletSELECT TABLET_ID, TABLE_ID, PARTITION_ID, TYPE, STATE, PRIORITY, ORIG_PRIORITY, FAILED_SCHEDULE_COUNT, FAILED_RUNNING_COUNT, MSG FROM information_schema.fe_tablet_schedules WHERE TYPE REPAIR AND (FAILED_SCHEDULE_COUNT 0 OR FAILED_RUNNING_COUNT 0) ORDER BY FAILED_SCHEDULE_COUNT FAILED_RUNNING_COUNT DESC;3. 观察 Clone 速率排查数据迁移是否异常缓慢SELECT TABLET_ID, SRC_BE_ID, DEST_BE_ID, CLONE_BYTES, CLONE_DURATION, CLONE_RATE, SCHEDULE_TIME, FINISH_TIME FROM information_schema.fe_tablet_schedules WHERE STATE RUNNING AND TYPE REPAIR ORDER BY CLONE_RATE ASC;与其他系统表的配合使用fe_tablet_schedules记录的是正在发生的调度回答的是动态过程问题若要结合静态元数据分析可与其他 information_schema 表配合通过TABLE_ID、PARTITION_ID关联fe_tables、fe_partitions等表将任务映射回具体的库表与分区从而判断调度任务集中在哪些热点表结合fe_be_nodes或 BE 侧指标核对SRC_BE_ID/DEST_BE_ID对应的节点是否存在宕机、磁盘满等问题从根源上解释FAILED_RUNNING_COUNT增长的原因。小结fe_tablet_schedules将 FE 内部 TabletScheduler 的调度任务以系统表形式开放给用户字段覆盖了任务的类型、状态、优先级、源/目标位置、Clone 进度与失败计数是运维 StarRocks 集群副本健康与数据均衡的必备观测入口。建议在集群发生扩缩容、BE 故障恢复或出现数据倾斜告警时将本文中的诊断查询作为标准排查流程的一部分。参考实现系统表定义与列结构FeTabletSchedulesSystemTable.java调度任务上下文类型/状态/优先级枚举、超时与失败阈值TabletSchedCtx.java调度器主逻辑任务入队、调度、Clone 执行TabletScheduler.java调度器统计信息TabletSchedulerStat.java【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考