ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SHOW ANALYZE STATUS 详解:StarRocks CBO 统计信息采集任务状态查询实战指南

SHOW ANALYZE STATUS 详解:StarRocks CBO 统计信息采集任务状态查询实战指南 SHOW ANALYZE STATUS 详解StarRocks CBO 统计信息采集任务状态查询实战指南【免费下载链接】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/starrocksStarRocks 的 CBOCost-Based Optimizer基于代价的优化器依赖高质量的统计信息来估算执行代价、选择最优执行计划而这些统计信息由后台的采集任务生成。SHOW ANALYZE STATUS正是用于查看这些统计信息采集任务状态的查询语句本文将从语法、返回列语义、外部表元数据、底层实现与排查实践五个维度结合 StarRocks 仓库源码完整讲解如何用它监控手动与自动统计采集任务并配合SHOW ANALYZE JOB、KILL ANALYZE完成统计任务的日常运维。读完本文你将掌握统计采集任务的完整状态观测与故障排查方案。背景StarRocks 统计信息采集任务体系在深入了解SHOW ANALYZE STATUS之前需要先厘清 StarRocks 中的统计采集任务分类。StarRocks 支持三种统计采集方式手动采集Manual collection通过ANALYZE TABLE创建任务只运行一次无需手动删除运行结束后即完成使命自定义自动采集Custom automatic collection通过CREATE ANALYZE创建按用户指定的调度策略周期性运行属于custom collection tasks系统默认自动采集Automatic collectionStarRocks 内置的自动统计任务按 FE 配置项如statistic_collect_interval_sec周期性检查并采集。这三类任务的调度类型Schedule只有两种手动任务为ONCE自动任务为SCHEDULE。SHOW ANALYZE STATUS 语法与能力边界SHOW ANALYZE STATUS从 v2.4 起支持用于查看统计信息采集任务的状态语法如下SHOW ANALYZE STATUS [WHERE]可以使用LIKE或WHERE对返回结果进行过滤例如按表名精确过滤SHOW ANALYZE STATUS where table ex_hive_tbl;需要特别强调的是该语句的能力边界它只能查看手动采集任务和系统自动采集任务的状态不能查看自定义采集任务custom collection tasks的状态。自定义任务请使用 SHOW ANALYZE JOB 查看。这一定位在 Gather statistics for CBO 文档中也有明确说明This statement cannot be used to view the status of custom collection tasks. To view the status of custom collection tasks, use SHOW ANALYZE JOB.返回列详解从文档到源码的逐列印证SHOW ANALYZE STATUS返回 11 个字段官方文档给出的语义如下表列名说明Id采集任务的 ID。Database数据库名。Table表名。Columns列名。Type统计信息类型包括 FULL、SAMPLE 和 HISTOGRAM。Schedule调度类型。ONCE表示手动SCHEDULE表示自动。Status任务状态。StartTime任务开始执行的时间。EndTime任务执行结束的时间。Properties自定义参数。对于外部表如 Iceberg、Hive、Paimon采集任务还会包含table_format、partition_count、column_count等采集元数据对于 Iceberg 表还包含snapshot_id、total_files和total_rows。Reason任务失败的原因。执行成功时返回 NULL。这些列在 FE 端由ShowAnalyzeStatusStmt.showAnalyzeStatus()方法逐列组装源码位于 ShowAnalyzeStatusStmt.java可以据此理解各列的精确语义Database 列catalog 与 db 的拼接格式源码中该列并非简单的数据库名而是以catalogName . dbName的格式输出row.set(1, analyzeStatus.getCatalogName() . analyzeStatus.getDbName())因此实际返回形如default_catalog.stats_db或hive_catalog.tn_test。在 WHERE 过滤时使用database字段时也应按此格式书写。Columns 列ALL 与局部采集的区分当采集任务针对整张表的所有可采集列时该列返回ALL当仅采集部分列时返回以逗号分隔的列名列表。源码通过StatisticUtils.getCollectibleColumns(table).size()计算整表可采集列总数只有当指定列集合非空且与总数不一致时才输出具体列名否则保持ALL。Type 列对应 AnalyzeType 枚举Type 列对应源码 StatsConstants.java 中的AnalyzeType枚举取值包括SAMPLE采样采集通过ANALYZE SAMPLE TABLE触发采样行数由statistic_sample_collect_rows属性控制默认 200000超过表实际行数时自动退化为全量采集FULL全量采集是ANALYZE TABLE的默认类型HISTOGRAM直方图采集。Schedule 列对应 ScheduleType 枚举对应ScheduleType枚举见 StatsConstants.javaONCE手动采集任务仅运行一次SCHEDULE自动采集任务含系统默认自动任务。Status 列枚举映射与 RUNNING 进度Status 列的输出逻辑最能体现该语句的实时性设计。底层状态对应ScheduleStatus枚举StatsConstants.java底层枚举展示值说明PENDINGPENDING任务排队等待执行。RUNNINGRUNNING (N%)任务执行中并附带实时进度百分比。FINISHSUCCESS仅用于ScheduleType.ONCE任务表示执行成功。FAILEDFAILED执行失败失败原因见 Reason 列。其中 RUNNING 的进度百分比由analyzeStatus.getProgress()动态提供是判断大表异步采集进度的关键指标。StartTime / EndTime固定格式的时间戳两个时间列在源码中统一使用yyyy-MM-dd HH:mm:ss格式输出DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)。注意 EndTime 在任务未结束时为空。Reason 列失败根因定位仅当任务失败时输出原因成功时为 NULL。在排查采集失败时这一列通常直接指向问题的根因如权限不足、元数据异常等。实战示例外部表统计采集状态观测以下示例摘自 Gather statistics for CBO 文档演示了对 Hive 外部表ex_hive_tbl执行全量采集后查看任务状态ANALYZE TABLE ex_hive_tbl(k1); --------------------------------------------------------------- | Table | Op | Msg_type | Msg_text | --------------------------------------------------------------- | hive_catalog.tn_test.ex_hive_tbl | analyze | status | OK | ---------------------------------------------------------------SHOW ANALYZE STATUS where table ex_hive_tbl; ------------------------------------------------------------------------------------------------------------------------------------------ | Id | Database | Table | Columns | Type | Schedule | Status | StartTime | EndTime | Properties | Reason | ------------------------------------------------------------------------------------------------------------------------------------------ | 16400 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:31:42 | 2023-12-04 16:31:42 | {} | | | 16465 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:37:35 | 2023-12-04 16:37:35 | {} | | | 16467 | hive_catalog.tn_test | ex_hive_tbl | k1 | FULL | ONCE | SUCCESS | 2023-12-04 16:37:46 | 2023-12-04 16:37:46 | {} | | ------------------------------------------------------------------------------------------------------------------------------------------从输出可以看出三条记录均为ONCE手动任务、FULL类型、状态SUCCESS且每执行一次ANALYZE TABLE都会生成一条新的历史记录因此该语句实际上也承担了采集历史记录查询的功能。文档中同样提到You can use SHOW ANALYZE STATUS to view the history of collection tasks.Properties 列深度解读外部表采集元数据Properties 列是该语句信息量最丰富的列它默认展示采集任务的自定义参数如果未指定则展示fe.conf中生效的默认参数实际生效值可通过该列核对。对于外部表Hive、Iceberg、Paimon、Hudi 等的采集任务还会附加展示采集元数据包括table_format表格式如 hive、iceberg、paimon 等partition_count采集涉及的分区数column_count采集涉及的列数对于 Iceberg 表额外包含snapshot_id、total_files、total_rows用于反映本次采集基于的 Iceberg 快照状态。这些字段的写入逻辑位于 ExternalFullStatisticsCollectJob.java采集任务运行时构建extendedInfo映射写入table_format、partition_count、column_count再通过table.getStatsCollectMetadata()合并快照级元数据最终与用户自定义 Properties 合并后写入AnalyzeStatus从而without introducing new columns地展示在 Properties 列中。值得关注的是同一份源码还展示了外部表采集的**有界成本扫描bounded-cost scan**能力任务会解析connector_table_analyze_scan_bytes_cap、connector_table_analyze_scan_files_cap、connector_table_analyze_scan_rows_cap等扫描预算上限并将实际生效的预算值一并写入 PropertiesEXTERNAL_ANALYZE_SCAN_BYTES_CAP等键。因此运维人员可以直接在SHOW ANALYZE STATUS的 Properties 列中确认某次外部表采集是否启用了有界扫描、上限是多少——这是该语句用于采集可观测性的一个典型场景。权限要求与底层实现权限模型在 StarRocks 的 RBAC 权限框架下用户查看某表的状态记录需要对该表拥有任意操作权限any action。源码中通过Authorizer.checkAnyActionOnTableLikeObject(context, analyzeStatus.getDbName(), table)进行校验若表不存在或权限不足该条记录会被跳过不展示见 ShowAnalyzeStatusStmt.java。这意味着不同权限的用户执行同一语句看到的记录集合可能不同。状态数据的存储与管理任务状态由 FE 的AnalyzeMgr统一管理核心数据结构是内存中的MapLong, AnalyzeStatus analyzeStatusMap见 AnalyzeMgr.java其关键管理操作包括addAnalyzeStatus()/replayAddAnalyzeStatus()新增任务状态并在 FE 元数据回放replay时恢复dropAnalyzeStatus()/dropExternalAnalyzeStatus()表被删除时同步清理对应的状态记录clearExpiredAnalyzeStatus()周期性清理过期的状态记录防止无界增长save()将全量状态随 FE image 持久化AnalyzeMgr.java保证 FE 重启后历史记录不丢失。从该结构可以推断SHOW ANALYZE STATUS展示的既是任务当前状态也是一份可持续追溯的历史记录视图手动任务运行一次后无需删除正是因为其历史记录天然保留在状态表中。与其他统计语句的协作完整排查链路SHOW ANALYZE STATUS并非孤立存在它与 CBO 统计体系的其他语句共同构成完整运维闭环语句职责与 SHOW ANALYZE STATUS 的关系ANALYZE TABLE创建手动采集任务可同步或异步异步模式下任务的后续状态由 SHOW ANALYZE STATUS 观察SHOW ANALYZE JOB查看自定义自动采集任务与 SHOW ANALYZE STATUS 互补覆盖自定义任务场景KILL ANALYZE取消运行中的采集任务手动任务的 ID 从 SHOW ANALYZE STATUS 获取SHOW STATS META / SHOW HISTOGRAM META查看已采集统计信息的元数据确认采集结果是否落库生效一个典型的异步采集排查流程如下发起采集对大数据量表执行异步手动采集ANALYZE TABLE big_tbl WITH ASYNC MODE;监控进度查询任务状态关注 RUNNING 后的进度百分比SHOW ANALYZE STATUS WHERE table big_tbl;失败定位若 Status 为 FAILED读取 Reason 列定位根因并核对 Properties 列确认实际生效的采集参数取消任务若任务耗时异常需要终止从状态结果中取得 Id 后执行KILL ANALYZE ID;结果验证通过SHOW STATS META确认统计信息元数据已更新采集闭环完成。关于统计信息采集的整体设计与各类配置参数如statistic_sample_collect_rows、自动采集间隔等可进一步阅读 Gather statistics for CBO各语句的完整语法可参考 ANALYZE TABLE、SHOW ANALYZE JOB 与 KILL ANALYZE 的官方参考文档。【免费下载链接】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),仅供参考
返回列表