【 使用环境 】 单节点 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 个赞
辞霜
2025 年9 月 17 日 10:59
#3
相关表结构和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 ; 查询的
辞霜
2025 年9 月 17 日 17:53
#5
麻烦这个调用DBMS包的命令详细也发一下
CALL DBMS_PARTITION.MANAGE_DYNAMIC_PARTITION();
1 个赞
5.7.25-OceanBase_CE-v4.3.5.3 这是BP3吧
1 个赞
辞霜
2025 年9 月 18 日 16:00
#9
PARTITION BY RANGE(part_key)
你提供的这part_key是什么呢,建表sql有点问题
辞霜
2025 年9 月 22 日 10:50
#14
查看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版本怎么查询
论坛小助手
2025 年9 月 25 日 10:05
#16
根据提供的文档片段,可以提供以下指导来帮助您定位和解决问题:
收集诊断信息 :首先,推荐使用 OceanBase 敏捷诊断工具 obdiag 收集诊断信息,以获取详细的日志和其他相关信息,这有助于更准确地定位问题。
查询分区管理历史 :您可以查询 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;
检查分区数量限制 :您提到单表分区数受 max_partition_num
控制,默认为 8192 个。您可以检查当前表的分区数量,确保没有超过这个限制。以下是查询表分区数量的语句:
SELECT COUNT(*) AS partition_count
FROM oceanbase.CDB_OB_TABLE_LOCATIONS
WHERE tenant_id = <您的租户ID> AND table_name = 'enc_anon';
统计每个租户在各个 Server 上的分区数量 :您可以使用以下 SQL 语句来统计每个租户在各个 Server 上的分区数量:
SELECT tenant_id, svr_ip, COUNT(*) AS partition_count
FROM oceanbase.CDB_OB_TABLE_LOCATIONS
GROUP BY tenant_id, svr_ip;
统计每个租户在每个 Server 上的内存上限 :您可以使用以下 SQL 语句来统计每个租户在每个 Server 上的内存上限:
SELECT tenant_id, svr_ip, hold AS memory_limit
FROM oceanbase.GV$OB_TENANT_MEMORY
GROUP BY tenant_id, svr_ip;
检查日志文件 :如果上述查询没有提供足够的信息,您还可以检查 observer.log
文件,查看是否有更多的错误信息。具体步骤如下:
登录 OBServer 节点所在的机器。
执行以下命令,进入日志文件所在的目录。
cd ~/oceanbase/log
使用 Vim 打开 observer.log
文件,搜索与分区管理相关的错误信息。
希望以上步骤能帮助您定位和解决问题。
更多信息请查看:
日志存储服务
查看内存的使用信息
查看租户或表占用的磁盘空间
使用命令行进行运维
OceanBase 数据库性能的影响因素
数据分布
分区概述
使用 OceanBase 数据库分区表进行水平拆分
oceanbase数据库运行过程中手动删除clog日志
ob_enable_show_trace 如何查询这个参数状态
辞霜
2025 年9 月 25 日 11:00
#18
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 无任何输出