OB4.2.2 执行手动收集统计信息,不收集直方图应该如何写

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】ob
【 使用版本 】4.2.2
【问题描述】OB4.2.2 执行手动收集统计信息,不收集直方图的语法应该如何书写 method_opt=>‘FOR ALL COLUMNS SIZE XXX’)
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

在 OceanBase 数据库 V4.2.2 版本中,如果您希望执行手动收集统计信息而不收集直方图,可以使用 DBMS_STATS 系统包中的 GATHER_SCHEMA_STATSGATHER_TABLE_STATS 过程,并且在 method_opt 参数中指定 FOR ALL COLUMNS SIZE 1。这样可以确保不收集任何直方图信息,因为 SIZE 1 表示每个列只收集一个条目的直方图,这实际上相当于不收集直方图。以下是具体的 SQL 语句示例:

如果您希望对整个模式下的所有表进行统计信息收集而不收集直方图,可以使用如下命令 [1]:

CALL DBMS_STATS.GATHER_SCHEMA_STATS(
    ownname => 'your_schema_name', 
    method_opt => 'FOR ALL COLUMNS SIZE 1'
);

如果您希望对特定表进行统计信息收集而不收集直方图,可以使用如下命令 [1]:

CALL DBMS_STATS.GATHER_TABLE_STATS(
    ownname => 'your_schema_name', 
    tabname => 'your_table_name', 
    method_opt => 'FOR ALL COLUMNS SIZE 1'
);

请将 your_schema_nameyour_table_name 替换为实际的模式名和表名。这些命令可以帮助您在不收集直方图的情况下完成统计信息的收集工作。 [1]

更多信息请查看:

  1. 手动统计信息收集
  2. 手动收集统计信息
  3. 收集统计信息概述

您可以参考下小助手的回复,

method_opt=>‘for all columns size 1’ 表示不收集直方图

现在厉害了啊,可以直接在mysql租户下跑这个包了。。我记得以前还要修改 enable_sql_extension 参数把扩展语法打开

在 OceanBase 数据库 V4.0 版本中,不管是 Oracle 模式还是 MySQL 模式都可以使用 DBMS_STATS 系统包进行手动统计信息收集,其中最常用的两个系统包的 PROCEDURE 是:GATHER_TABLE_STATSGATHER_SCHEMA_STATS ,前者用于收集某张表的统计信息,后者用于收集某个库中所有表的统计信息。

ANALYZE 语法在 MySQL 模式执行的时候需要打开系统变量 enable_sql_extension ,由于原生 MySQL 没有这种语法,因此需要在扩展模式执行。

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001054613

1 个赞