存储过程问题定位

【 使用环境 】 单节点 centos7
【 OB or 其他组件 】 ob
【 使用版本 】 ob-ce 4.35
【问题描述】

调用存储过程 例如 CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(); 虽然提示执行成功,但没有效果,查询 SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT = ‘MANAGE_DYNAMIC_PARTITION’
ORDER BY TIMESTAMP DESC ; 发现列FAILED_TABLE_ID_LIST存在失败表,但是没给出错误提示 如何定位问题原因呢?

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

2 个赞

相关表结构和CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION()语句的详细sql提供一下

CREATE TABLE IF NOT EXISTS enc_anon (

`rec_id`         bigint(20)   ,      

`obj_code`       varchar(32)   ,    

`key`       bigint            

) DYNAMIC_PARTITION_POLICY(

TIME_UNIT = ‘day’,

PRECREATE_TIME = ‘3day’,

BIGINT_PRECISION = ‘s’

) PARTITION BY RANGE(part_key) (

PARTITION p20250917 VALUES LESS THAN(20250918)

); 调用官方提供的 CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION(); 作用是生成动态分区, 出错信息是通过 系统视图 SELECT TIMESTAMP , EVENT , NAME1 , VALUE1 , NAME2 ,VALUE2 FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT = ‘MANAGE_DYNAMIC_PARTITION’
ORDER BY TIMESTAMP DESC ; 查询的

麻烦这个调用DBMS包的命令详细也发一下
CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();

1 个赞

435版本bp几版本,这边复现一下

5.7.25-OceanBase_CE-v4.3.5.3 这是BP3吧

1 个赞

PARTITION BY RANGE(part_key)
你提供的这part_key是什么呢,建表sql有点问题

感谢分享!

666

感谢分享

查看observer日志比较方便使用下面这种方法
1)设置trace信息
SET ob_enable_show_trace=‘ON’;

2)执行sql。

3)获取上个命令的trace
select last_trace_id();

4)获取trace对应的节点
select query_sql,svr_ip from gv$ob_sql_audit where trace_id=‘第三步获取的trace信息’;

5)取对应的svr_ip节点 过滤日志
grep “第三步获取的trace信息” observer.log*
grep “第三步获取的trace信息” rootservice.log*

6)提供日志信息即可。

@论坛小助手 你来说一下 统计每个租户在各个 Server 上的分区数量。 统计每个租户在每个 Server 上的内存上限。 这些在4.35版本怎么查询

根据提供的文档片段,可以提供以下指导来帮助您定位和解决问题:

  1. 收集诊断信息:首先,推荐使用 OceanBase 敏捷诊断工具 obdiag 收集诊断信息,以获取详细的日志和其他相关信息,这有助于更准确地定位问题。

  2. 查询分区管理历史:您可以查询 oceanbase.DBA_OB_TENANT_EVENT_HISTORY 视图来查看具体的分区管理事件,特别是 FAILED_TABLE_ID_LIST 列,它会列出失败的表及其可能的原因。以下是查询语句:

    SELECT TIMESTAMP, EVENT, NAME1, VALUE1, NAME2, VALUE2
    FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY
    WHERE EVENT = 'MANAGE_DYNAMIC_PARTITION'
    ORDER BY TIMESTAMP DESC;
    
  3. 检查分区数量限制:您提到单表分区数受 max_partition_num 控制,默认为 8192 个。您可以检查当前表的分区数量,确保没有超过这个限制。以下是查询表分区数量的语句:

    SELECT COUNT(*) AS partition_count
    FROM oceanbase.CDB_OB_TABLE_LOCATIONS
    WHERE tenant_id = <您的租户ID> AND table_name = 'enc_anon';
    
  4. 统计每个租户在各个 Server 上的分区数量:您可以使用以下 SQL 语句来统计每个租户在各个 Server 上的分区数量:

    SELECT tenant_id, svr_ip, COUNT(*) AS partition_count
    FROM oceanbase.CDB_OB_TABLE_LOCATIONS
    GROUP BY tenant_id, svr_ip;
    
  5. 统计每个租户在每个 Server 上的内存上限:您可以使用以下 SQL 语句来统计每个租户在每个 Server 上的内存上限:

    SELECT tenant_id, svr_ip, hold AS memory_limit
    FROM oceanbase.GV$OB_TENANT_MEMORY
    GROUP BY tenant_id, svr_ip;
    
  6. 检查日志文件:如果上述查询没有提供足够的信息,您还可以检查 observer.log 文件,查看是否有更多的错误信息。具体步骤如下:

    1. 登录 OBServer 节点所在的机器。

    2. 执行以下命令,进入日志文件所在的目录。

      cd ~/oceanbase/log
      
    3. 使用 Vim 打开 observer.log 文件,搜索与分区管理相关的错误信息。

希望以上步骤能帮助您定位和解决问题。

更多信息请查看:

  1. 日志存储服务
  2. 查看内存的使用信息
  3. 查看租户或表占用的磁盘空间
  4. 使用命令行进行运维
  5. OceanBase 数据库性能的影响因素
  6. 数据分布
  7. 分区概述
  8. 使用 OceanBase 数据库分区表进行水平拆分
  9. oceanbase数据库运行过程中手动删除clog日志

ob_enable_show_trace 如何查询这个参数状态

show parameters like ‘% ob_enable_show_trace%’;

@论坛小助手 执行一条查询sql 报错 rrorCode = 1210, SQLState = HY000, Details = Invalid argument ,我想定位报错原因 查询审计表 有两条 gv$ob_sql_audit 这个表那些是重要字段呢,能看出 深层报错原因吗 日志 grep -C 10 ‘YB42C0A81FA8-00063F60EC68CE7B-0-0’ /opt/ob2/observer/myob/oceanbase/log/observer.log grep -C 10 ‘YB42C0A81FA8-00063F60EC68CE7B-0-0’ /opt/ob2/observer/myob/oceanbase/log/rootservice.log 无任何输出

快来解答问题了 @论坛小助手