尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
StarRocks CREATE ANALYZE 完全指南:自定义 CBO 统计信息自动采集任务
StarRocks CREATE ANALYZE 完全指南自定义 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/starrocks本篇技术指南围绕 StarRocks 的CREATE ANALYZE语句展开讲解如何为成本优化器CBO自定义统计信息的自动采集任务包括语法、PROPERTIES 参数、全量与抽样采集的选择、任务查询/删除/取消的配套命令并结合 FE 源码剖析其底层执行原理。读完本文你将能够根据表大小、数据更新频率与统计健康度为单表、单库乃至全库定制精确的统计采集策略替代或覆盖系统默认的自动全量采集。背景为什么需要自定义统计采集任务StarRocks 的 CBOCost-Based Optimizer基于代价的优化器自 1.19 起默认开启基于级联Cascades框架开发通过估算每个算子CPU、内存、网络、I/O的执行代价在数以万计的执行计划中挑选代价最低的一条作为最终物理计划。而这一切的前提是准确且新鲜的统计信息。统计信息是 CBO 代价估算的输入。StarRocks 默认会为表自动采集全量统计信息系统每隔一段时间检查一次数据是否有更新相关检查间隔由 FE 配置statistic_collect_interval_sec控制默认值为 600 秒即 10 分钟CREATE_ANALYZE.md 中亦描述为约每 5 分钟检查数据变更。一旦检测到数据变化即自动触发采集。自动全量采集会消耗较多系统资源。如果你不希望使用默认的自动全量采集可以将 FE 配置项enable_collect_full_statistic设为false源码默认值为true见 Config.java关闭系统默认的全量自动采集通过CREATE ANALYZE语句自定义采集任务按需指定采集范围、采集方式与关键阈值。此外需要注意版本行为差异3.2.12 与 3.3.4 之前要创建自定义自动采集任务必须先关闭自动全量采集enable_collect_full_statistic false否则自定义任务无法生效自这些版本起用户可以同时创建 analyze job 并保留系统任务当用户创建的任务与系统任务存在冲突时用户创建的任务会覆盖系统任务。CREATE ANALYZE语句自 v2.4 起支持。语法总览-- 自动采集所有数据库的统计信息 CREATE ANALYZE [FULL|SAMPLE] ALL PROPERTIES (property [,property]) -- 自动采集某个数据库中所有表的统计信息 CREATE ANALYZE [FULL|SAMPLE] DATABASE db_name PROPERTIES (property [,property]) -- 自动采集某张表中指定列的统计信息 CREATE ANALYZE [FULL|SAMPLE] [IF NOT EXISTS] TABLE tbl_name (col_name [,col_name]) PROPERTIES (property [,property])三种粒度ALL / DATABASE / TABLE分别对应全局、库级、表级三种作用范围IF NOT EXISTS仅用于表级语法用于避免重复创建同名任务时报错。参数说明采集类型类型说明FULL全量采集。扫描整张表来收集统计信息统计结果准确但消耗系统资源较大、速度较慢SAMPLE抽样采集。从每个分区中均匀抽取 N 行数据进行统计速度快、资源消耗小但 ndv列基数等指标基于抽样估算精度略低不指定默认执行抽样采集与手动采集ANALYZE TABLE默认全量采集不同自定义任务不指定类型时默认 SAMPLE列名col_name指定要采集统计信息的列多个列用逗号,分隔。若未指定则默认采集整张表。PROPERTIESPROPERTIES用于自定义参数。若不指定则使用fe.conf中的默认配置。任务实际生效的属性值可以通过 SHOW ANALYZE JOB 输出中的Properties列查看。PROPERTIES类型默认值说明statistic_auto_collect_ratioFLOAT0.8判断自动采集统计信息是否健康的阈值。若统计健康度低于该阈值则触发自动采集。健康度公式见下文“触发机制与健康度”小节statistics_max_full_collect_data_sizeINT100自动采集时允许采集数据的分区最大数据量单位GB。若分区超过该值则放弃全量采集改为执行抽样采集statistic_sample_collect_rowsINT200000抽样采集时至少采集的行数。若该值超过表中实际行数则自动退化为全量采集补充说明在 Cost_based_optimizer.md 的“自定义自动采集任务”一节中上述参数以字节为单位给出 FE 侧全局默认值例如statistic_max_full_collect_data_size默认 107374182400 字节即 100 GB并额外列出两个同样可用于任务级PROPERTIES的扩展参数PROPERTIES类型默认值说明statistic_exclude_patternStringnull需要排除的数据库或表名称匹配内容为database.table支持正则表达式。用于在任务中排除不采集统计信息的库/表statistic_auto_collect_intervalLONG0自动采集间隔单位秒。默认情况下 StarRocks 根据表大小选择statistic_auto_collect_small_table_interval或statistic_auto_collect_large_table_interval若在创建任务时显式指定了该属性则其优先级高于上述两个全局配置触发机制与统计健康度自定义自动采集任务同样遵循 StarRocks 自动采集的触发判定。触发自动采集需满足以下条件表数据自上次统计采集以来发生了变化采集时间处于配置的采集时间段内由 FE 参数statistic_auto_analyze_start_time与statistic_auto_analyze_end_time控制默认全天上次采集任务的更新时间早于分区的最新更新时间表统计健康度低于指定阈值statistic_auto_collect_ratio默认 0.8。统计健康度公式若发生数据更新的分区数小于 10公式为1 - (自上次采集以来的更新行数 / 总行数)若发生数据更新的分区数大于等于 10公式为1 - MIN(自上次采集以来的更新行数 / 总行数, 自上次采集以来的更新分区数 / 总分区数)自 v3.5.0 起StarRocks 不再比较统计信息采集时间与数据更新时间而是依据分区更新行数占比判断分区是否健康可通过 FE 配置项statistic_partition_health_v2_threshold调整若需恢复旧健康检查行为可将statistic_partition_healthy_v2设为false。在源码层面健康度判定逻辑位于 StatisticsCollectJobFactory.java当healthy statisticAutoCollectRatio时任务认为统计信息依然健康直接跳过源码注释statistics job doesnt work on health table同时当默认任务job.isDefaultJob()的数据总量超过Config.statistic_max_full_collect_data_size时会放弃全量采集并降级为抽样采集这正是 PROPERTIES 中statistics_max_full_collect_data_size与 FE 全局配置同名参数的源码对应逻辑。使用示例示例一自动全量采集-- 自动采集所有数据库的全量统计信息 CREATE ANALYZE ALL; -- 自动采集某个数据库的全量统计信息 CREATE ANALYZE DATABASE db_name; -- 自动采集某个数据库中所有表的全量统计信息 CREATE ANALYZE FULL DATABASE db_name; -- 自动采集某张表中指定列的全量统计信息 CREATE ANALYZE TABLE tbl_name(c1, c2, c3);注意CREATE ANALYZE DATABASE db_name;与CREATE ANALYZE FULL DATABASE db_name;在示例中效果相同因为表级之外未指定类型时的默认行为是抽样采集而库级/全局采集默认同样为抽样——因此需要全量采集时请显式写出FULL关键字。示例二自动抽样采集-- 使用默认设置自动采集某个数据库中所有表的统计信息 CREATE ANALYZE SAMPLE DATABASE db_name; -- 自动采集某张表中指定列的统计信息并指定统计健康度阈值与采集行数 CREATE ANALYZE SAMPLE TABLE tbl_name(c1, c2, c3) PROPERTIES( statistic_auto_collect_ratio 0.5, statistic_sample_collect_rows 1000000 );进阶示例排除指定库表借助statistic_exclude_pattern可在任务中排除不需要采集的库/表-- 采集所有数据库但排除名为 db_name 的数据库 CREATE ANALYZE ALL PROPERTIES ( statistic_exclude_pattern db_name\. ); -- 采集某个数据库中所有表但排除表 db_name.tbl_name CREATE ANALYZE SAMPLE DATABASE db_name PROPERTIES ( statistic_exclude_pattern db_name.tbl_name );如需完全用自定义任务替代系统默认自动采集任务可参考ADMIN SET FRONTEND CONFIG(enable_auto_collect_statisticsfalse); DROP ALL ANALYZE JOB; CREATE ANALYZE FULL ALL db_name PROPERTIES ( statistic_exclude_pattern db_name.tbl_name );配套管理命令查看、删除与取消自定义采集任务创建后可用以下三个命令进行全生命周期管理。SHOW ANALYZE JOB查看自定义采集任务SHOW ANALYZE JOB [WHERE]可通过WHERE子句过滤结果。返回的列如下列名说明Id采集任务的 IDDatabase数据库名Table表名Columns列名Type统计信息类型包括FULL和SAMPLESchedule调度类型自动任务为SCHEDULEProperties自定义参数Status任务状态包括 PENDING、RUNNING、SUCCESS 和 FAILEDLastWorkTime上次采集时间Reason任务失败原因执行成功时返回 NULL-- 查看所有自定义采集任务 SHOW ANALYZE JOB; -- 查看数据库 test 下的自定义采集任务 SHOW ANALYZE JOB where database test;DROP ANALYZE删除自定义采集任务DROP ANALYZE ID任务 ID 可通过SHOW ANALYZE JOB语句获取。也可使用DROP ALL ANALYZE JOB;一次性删除全部自定义任务。DROP ANALYZE 266030;KILL ANALYZE取消正在运行的采集任务KILL ANALYZE IDKILL ANALYZE可取消正在运行的采集任务包括手动采集任务与自定义自动采集任务。手动采集任务的 ID 可从SHOW ANALYZE STATUS获取自定义采集任务的 ID 可从SHOW ANALYZE JOB获取。从源码看 CREATE ANALYZE 的实现CREATE ANALYZE的语法树节点为CreateAnalyzeJobStmt见 CreateAnalyzeJobStmt.java其关键设计如下三种粒度统一建模构造器分别支持ALL无库名无表名、DATABASE仅库名与TABLETableRef 携带库表名三种形式。库 ID 与表 ID 的默认值为StatsConstants.DEFAULT_ALL_ID -1表示“所有库/所有表”一旦在分析阶段解析到具体对象便通过setDbId/setTableId写入实际 ID。类型判定isSample标志决定采集类型未显式指定类型时构造器默认isSample true对应AnalyzeType.SAMPLE与文档中“默认抽样采集”的描述一致。属性透传PROPERTIES以MapString, String原样存储并在调度阶段由采集任务工厂解析使用。任务级属性名在 StatsConstants.java 中被定义为常量包括STATISTIC_AUTO_COLLECT_RATIOstatistic_auto_collect_ratio、STATISTIC_SAMPLE_COLLECT_ROWSstatistic_sample_collect_rows、STATISTIC_EXCLUDE_PATTERNstatistic_exclude_pattern与STATISTIC_AUTO_COLLECT_INTERVALstatistic_auto_collect_interval与 SQL 语法一一对应。统计信息本身存储于_statistics_数据库下的系统表中全量统计存于column_statistics表抽样统计存于table_statistic_v1表自 v3.5.0 起抽样与全量统计统一存入column_statistics表可通过将 FE 配置statistic_use_meta_statistics设为false恢复旧存储方式。此外自定义任务还受以下 FE 配置的全局约束均可用ADMIN SET CONFIG修改FE 配置项类型默认值说明enable_statistic_collectBOOLEANTRUE是否开启默认与用户自定义自动采集任务enable_collect_full_statisticBOOLEANTRUE是否启用系统默认的自动全量采集statistic_auto_analyze_start_timeSTRING00:00:00自动采集开始时间取值范围00:00:00-23:59:59statistic_auto_analyze_end_timeSTRING23:59:59自动采集结束时间statistic_auto_collect_small_table_sizeLONG5368709120判断“小表”的数据量阈值字节大于该值视为大表默认 5 GBstatistic_auto_collect_small_table_intervalLONG0小表自动全量采集间隔单位秒statistic_auto_collect_large_table_intervalLONG43200大表自动全量采集间隔单位秒默认 12 小时statistic_auto_collect_sample_thresholdDOUBLE0.3触发自动抽样采集的健康度阈值低于该值触发抽样采集statistic_max_full_collect_data_sizeLONG107374182400自动采集可采集分区的数据量上限字节超过则全量降级为抽样默认 100 GB权限要求与使用限制创建自定义采集任务需要拥有目标表的INSERT 与 SELECT 权限。自 v3.2.0 起StarRocks 支持为 Hive、Iceberg、Hudi 等外部表采集统计信息语法与内部表类似但自定义自动采集任务仅支持针对特定表不能像内部表那样对整个外部库或外部 Catalog 的所有表进行采集。外部表统计信息存放在default_catalog._statistics_.external_column_statistics表中。对于内部表若希望保留系统默认任务同时新增自定义任务请使用 3.2.12 / 3.3.4 及更高版本此时用户任务与系统任务冲突时以用户任务为准。延伸阅读SHOW ANALYZE JOB查看自定义采集任务的状态DROP ANALYZE删除自定义采集任务KILL ANALYZE取消正在运行的自定义采集任务Gather statistics for CBOCBO 统计信息采集的完整说明基本统计、直方图、多列联合统计、手动采集、外部表采集等【免费下载链接】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),仅供参考
RELATED

相关推荐

当 Cohere 返回 429,TaoToken 侧要改什么

当 Cohere 返回 429,TaoToken 侧要改什么

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/19 7:08:14
FIDIC EPC银皮书英文版.doc条款解析与检索

FIDIC EPC银皮书英文版.doc条款解析与检索

简介:这份资源是FIDIC设计采购施工(EPC)合同条件银皮书的英文原版文档,面向国际工程项目管理人员、合同工程师、造价与法务人员,以及备考FIDIC相关资格考试或从事海外EPC总承包业务的学习者,用于查阅权威合…

📅 2026/9/19 7:08:13
Flutter OHOS 滑动卡顿丢帧时延全链路分析与优化实践

Flutter OHOS 滑动卡顿丢帧时延全链路分析与优化实践

Flutter OHOS 滑动卡顿丢帧与时延问题分析指南去年接手一个在鸿蒙(OHOS)设备上跑 Flutter 的项目,测试同事递过来一台手机,语气平淡地说“你滑一下这个列表”。我滑了一下,心里凉了半截:列表滚动像在放幻灯…

📅 2026/9/19 7:03:13
MORE NEWS

更多资讯

📰

OpenClaw架构解析:LLM与工具调用的工程实践

1. OpenClaw架构全景解析OpenClaw最近在AI工程圈引发热议,这个将大语言模型(LLM)、工具调用(Tools)和运行时环境(Runtime)深度融合的框架,正在重新定义AI应用的开发范式。作为全程参…

📰

LabelImg图像标注工具实战指南与最佳实践

1. 数据标注工具选型与准备1.1 为什么选择LabelImg在计算机视觉项目中,数据标注是模型训练前最关键的准备工作之一。LabelImg作为一款开源的图像标注工具,因其轻量化和易用性成为众多从业者的首选。我选择它的主要原因有三点:首先&#xff0c…

📰

返利结算对账系统:日结月结双轨设计、幂等与高容错实战

干返利结算这行的人,多少都经历过"对账五分钟,扯皮两小时"的阶段。业务方追着问这个月的返利为什么少了,财务拿着一堆Excel来回比对,技术这边日志翻到眼瞎也说不清某笔单子到底算没算进去。这套自动化对账系统&#xff…

📰

运动App集成AI宠物功能实践复盘:从需求拆解到上线避坑

前几个月我参与了一个运动类 App 的改版,核心需求是给 App 增加一个 AI 宠物功能。这个功能乍一听是个“噱头”,但真正落地之后,从宠物识别模型的数据标注,到对话助手的 Prompt 调优,再到 Java 后端和 Python 推理服务…

📰

SpringBoot健康监测系统开发实践与架构解析

1. 项目概述:基于SpringBoot的健康监测管理系统这个健康监测管理系统是我去年指导的一个计算机专业本科毕业设计项目,核心目标是构建一个能够实时监测用户健康数据、提供健康建议的智能平台。系统采用Java语言开发,基于SpringBoot框架实现快速…

📰

SpringBoot茶叶商城系统设计与实现

1. 项目背景与核心价值茶叶作为中国传统饮品,近年来线上销售规模持续增长。这个基于SpringBoot的茶叶商城系统正是瞄准了这个细分领域的电商需求。不同于通用电商平台,它针对茶叶商品特性做了深度定制,解决了茶叶类目特有的展示、交易和售后问…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬