资讯动态

StarRocks 统计信息管理:DROP STATS 语句全面解析与实战指南

发布时间:2026/9/19 23:25:32 来源:尧图企业网站定制
StarRocks 统计信息管理DROP STATS 语句全面解析与实战指南【免费下载链接】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 CBO基于成本的优化器统计信息删除语句DROP STATS系统讲解其作用范围、底层行为、完整语法与操作流程。读完本文你将掌握如何删除基础统计信息、直方图以及自 v3.5.0 起多列联合统计信息理解删除操作对缓存与后续自动收集任务的影响并能结合SHOW ANALYZE STATUS等配套命令对统计信息进行全生命周期的验证与管理。原文文档见 DROP_STATS.md。一、为什么要删除统计信息CBO 与统计信息的关系StarRocks 的 CBOCost-Based Optimizer是查询优化的核心SQL 到达后先被解析为逻辑执行计划CBO 将其改写并转换为多个物理执行计划再估算每个算子CPU、内存、网络、I/O的执行代价最终选择代价最低的路径作为物理计划。统计信息是代价估算的输入其准确性直接决定执行计划的质量。完整背景参见 Gather statistics for CBO。StarRocks 维护三类统计信息基础统计Basic Statistics包括row_count总行数、data_size列数据大小、ndv列基数/去重值数量、null_countNULL 值数量、min、max。默认存储在_statistics_数据库的column_statistics表中。直方图HistogramStarRocks 2.4 引入采用等深直方图equi-height histogram用于数据倾斜场景下更准确地刻画数据分布。仅支持数值、DATE、DATETIME 和字符串类型列存储在_statistics_库的histogram_statistics表中。多列联合统计Multi-column Joint Statistics自 v3.5.0 起支持当前仅支持多列联合 NDV用于 AND 等值谓词、Agg 节点基数估算与聚合下推策略存储在_statistics_库的multi_column_statistics表中。在如下场景中删除统计信息是必要且合理的运维操作表结构变更后旧统计不再适用测试环境残留的过期统计污染优化决策误收集了冗余列或冗余分区的统计需要主动使 FE 中缓存的统计失效以便触发重新收集。二、DROP STATS 语句核心行为与注意事项DROP STATS用于删除 CBO 统计信息包括基础统计和直方图。文档明确其关键行为删除范围同时删除统计信息的数据data与元数据metadata以及过期缓存中的统计信息。可能被重新收集如果自动收集任务正在进行之前被删除的统计信息可能会被再次收集。这是正常的系统行为并非删除失效。任务历史可查可以使用SHOW ANALYZE STATUS查看收集任务的历史记录。版本支持该语句自v2.4起支持。从实现上看删除操作除了清理_statistics_库中的存储数据还会使 FE 中缓存的对应统计失效确保后续查询优化不会使用被删统计。这一点在 Gather statistics for CBO 的 Delete statistics 章节有更详细的描述删除基础统计会同时使 FE 缓存的表统计失效自 v3.5.0 起删除基础统计时也会一并删除该表的多列联合统计。提示如果希望彻底阻止统计被再次收集需要结合调度任务的治理——例如关闭默认自动收集FE 配置项enable_collect_full_statistic、删除自定义收集任务DROP ALL ANALYZE JOB或使用statistic_exclude_pattern排除特定表具体参见 Cost_based_optimizer.md 的 Custom collection 章节。三、语法详解3.1 删除基础统计DROP STATS tbl_nametbl_name目标表名支持[catalog_name.][database_name.]table_name全限定形式例如DROP STATS db1.tbl1;。该语句删除存储在default_catalog._statistics_.column_statistics表中的统计信息并使 FE 缓存中对应的表统计失效。自 v3.5.0 起该语句还会删除该表的多列联合统计信息。3.2 删除多列联合统计v3.5.0 起DROP MULTIPLE COLUMNS STATS tbl_name该语句仅删除存储在default_catalog._statistics_.multi_column_statistics表中的多列联合统计并使 FE 缓存中对应的多列联合统计失效。注意它不会删除表的基础统计信息。如果只想清理多列联合统计而保留基础统计应使用此语句而非DROP STATS。3.3 删除直方图ANALYZE TABLE tbl_name DROP HISTOGRAM ON col_name [, col_name];直方图按列删除col_name支持逗号分隔的多个列名一次可删除多列的直方图。这是唯一删除直方图的方式——DROP STATS tbl_name本身并不删除直方图直方图需要单独用DROP HISTOGRAM语句删除。从语法解析器源码看StarRocks.g4 中两条规则的文法定义为dropStatsStatement : DROP (MULTIPLE COLUMNS)? STATS qualifiedName ; dropHistogramStatement : ANALYZE TABLE qualifiedName DROP HISTOGRAM ON qualifiedName (, qualifiedName)* ;即DROP STATS与DROP MULTIPLE COLUMNS STATS共用同一文法规则通过可选的MULTIPLE COLUMNS关键字区分而直方图删除归属于 ANALYZE TABLE 语句族。对应的 AST 节点 DropStatsStmt.java 通过isMultiColumn与isExternal两个标志区分多列删除与外部表删除并通过TableRef解析出 catalog、database、table 名称——这也印证了DROP STATS对内部表与外部表Hive/Iceberg/Hudi 等的统一支持能力。四、完整操作流程收集 → 查看 → 删除 → 验证下面给出一个端到端示例覆盖统计信息的收集、状态查看、删除与验证。第 1 步收集统计信息使用 ANALYZE TABLE 先创建统计-- 全量收集表 tbl_name 的基础统计默认同步模式 ANALYZE TABLE tbl_name; -- 采样收集指定列 ANALYZE SAMPLE TABLE tbl_name (v1, v2, v3) PROPERTIES( statistic_sample_collect_rows 1000000 ); -- 为倾斜列 v1、v2 收集直方图指定 32 个桶、32 个 MCV、50% 采样率 ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON v1, v2 WITH 32 BUCKETS PROPERTIES( histogram_mcv_size 32, histogram_sample_ratio 0.5 );第 2 步查看收集任务状态使用 SHOW ANALYZE STATUS 确认任务已完成并记录任务 IDSHOW ANALYZE STATUS WHERE table tbl_name;返回结果中的关键列TypeFULL/SAMPLE/HISTOGRAM、ScheduleONCE表示手动SCHEDULE表示自动、Status、StartTime、EndTime、Properties、Reason。对于外部表Iceberg、Hive、Paimon的收集任务Properties列还会包含table_format、partition_count、column_count以及 Iceberg 表的snapshot_id、total_files、total_rows等收集元数据。第 3 步删除统计信息-- 删除表 tbl_name 的全部基础统计v3.5.0 起同时删除多列联合统计 DROP STATS tbl_name; -- 仅删除多列联合统计保留基础统计 DROP MULTIPLE COLUMNS STATS tbl_name; -- 删除 v1、v2 两列的直方图 ANALYZE TABLE tbl_name DROP HISTOGRAM ON v1, v2;第 4 步验证删除结果删除后可通过元数据视图确认统计已被清理-- 查看基础统计元数据 SHOW STATS META WHERE table tbl_name; -- 查看直方图元数据 SHOW HISTOGRAM META WHERE table tbl_name;也可以直接查询_statistics_库确认数据已删除SELECT * FROM _statistics_.column_statistics WHERE table_name tbl_name; SELECT * FROM _statistics_.histogram_statistics WHERE table_name tbl_name;五、配套的统计信息管理命令一览DROP STATS是统计信息管理生命周期的一环实践中常与以下语句配合使用均自 v2.4 起支持文档位于 cbo_stats 目录命令用途ANALYZE TABLE创建一次性手动收集任务同步/异步支持 FULL/SAMPLE、直方图、Predicate Column、多列联合统计CREATE ANALYZE创建自定义自动收集任务DROP ANALYZE删除自定义收集任务KILL ANALYZE取消正在运行的收集任务SHOW ANALYZE STATUS查看收集任务状态不含自定义任务SHOW ANALYZE JOB查看自定义收集任务DROP STATS本文删除基础统计 / 多列联合统计 / 直方图使用注意执行ANALYZE TABLE等收集操作需要目标表的 INSERT 与 SELECT 权限DROP STATS作为 DDL 类语句同样建议由具备相应库表管理权限的账号执行。六、常见问题与最佳实践删除后统计马上又出现了这是自动收集任务在调度周期内重新收集所致属于预期行为。若需避免可暂停默认自动收集ADMIN SET FRONTEND CONFIG(enable_collect_full_statisticfalse)或通过statistic_exclude_pattern排除对应表。DROP STATS之后 CBO 会怎样统计被清空后CBO 会退化为按默认策略进行估算直到下一次收集完成。建议在删除前确认该表不再承载关键查询或删除后立即触发一次ANALYZE TABLE重新收集。直方图没有被DROP STATS删掉是的直方图必须用ANALYZE TABLE tbl_name DROP HISTOGRAM ON col_name单独删除这是文档明确规定的行为。外部表能否删除统计可以。DROP STATS语法对内部表与外部表统一适用DropStatsStmt中的isExternal标志会在分析阶段根据表归属自动设置外部表统计存储在default_catalog._statistics_.external_column_statistics表中。参考语句原文DROP_STATS.mdCBO 统计信息收集全景Gather statistics for CBO手动收集语句ANALYZE_TABLE.md任务状态查看SHOW_ANALYZE_STATUS.md语法定义StarRocks.g4AST 实现DropStatsStmt.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),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价