作者简介:吕彦臻,瑞蓝创数据库工程师
原创内容未经授权不得随意使用,转载请联系小编并注明来源
排查过程
集群版本: 4.4.2.0
BB表是23号创建的,24号凌晨自动分区没调度成功
SELECT * FROM oceanbase.DBA_OB_DYNAMIC_PARTITION_TABLES WHERE TABLE_NAME = 'BB';
+---------------+--------------------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+
| DATABASE_NAME | TABLE_NAME | TABLE_ID | MAX_HIGH_BOUND_VAL | ENABLE | TIME_UNIT | PRECREATE_TIME | EXPIRE_TIME | TIME_ZONE | BIGINT_PRECISION |
+---------------+--------------------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+
| AA | BB | 518786 | '2026-09-25 00:00:00' | TRUE | DAY | 7DAY | 15DAY | DEFAULT | NONE |
+---------------+--------------------------+----------+-----------------------+--------+-----------+----------------+-------------+-----------+------------------+
1 row in set (0.091 sec)
看着分区策略没调度成功,过期删除和预创建分区都没,25号的分区是客户手动创建的。
select/*+query_timeout(30000000)*/* from oceanbase.__all_virtual_ddl_operation where tenant_id=1006and ddl_stmt_str like'%BB%'orderby gmt_modified desclimit20\G;
*************************** 1. row ***************************
tenant_id: 1006
schema_version: 1790213391570784
gmt_create: 2026-09-24 09:29:51.579196
gmt_modified: 2026-09-24 09:29:51.579196
user_id: 0
database_id: 515851
database_name:
tablegroup_id: -1
table_id: 518786
table_name:
operation_type: 3
ddl_stmt_str: ALTERTABLE BB
ADDPARTITION (
PARTITION P20260924
VALUESLESSTHAN ('2026-09-25 00:00:00')
)
exec_tenant_id: 1006
*************************** 2.row ***************************
tenant_id: 1006
schema_version: 1790134620269744
gmt_create: 2026-09-2311:37:00.348857
gmt_modified: 2026-09-2311:37:00.348857
user_id: 0
database_id: 515851
database_name:
tablegroup_id: -1
table_id: 518786
table_name:
operation_type: 4
ddl_stmt_str:
CREATETABLE`BB` (
XX
) DEFAULTCHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci
DYNAMIC_PARTITION_POLICY (
ENABLE = TRUE,
TIME_UNIT = 'day',
PRECREATE_TIME = '7 day',
EXPIRE_TIME = '15 day',
TIME_ZONE = 'default'
)
PARTITIONBYRANGECOLUMNS (`execute_time`) (
PARTITION`p_seed`VALUESLESSTHAN ('2026-09-08 00:00:00'),
PARTITION`p20260908`VALUESLESSTHAN ('2026-09-09 00:00:00'),
PARTITION`p20260909`VALUESLESSTHAN ('2026-09-10 00:00:00'),
PARTITION`p20260910`VALUESLESSTHAN ('2026-09-11 00:00:00'),
PARTITION`p20260911`VALUESLESSTHAN ('2026-09-12 00:00:00'),
PARTITION`p20260912`VALUESLESSTHAN ('2026-09-13 00:00:00'),
PARTITION`p20260913`VALUESLESSTHAN ('2026-09-14 00:00:00'),
PARTITION`p20260914`VALUESLESSTHAN ('2026-09-15 00:00:00'),
PARTITION`p20260915`VALUESLESSTHAN ('2026-09-16 00:00:00'),
PARTITION`p20260916`VALUESLESSTHAN ('2026-09-17 00:00:00'),
PARTITION`p20260917`VALUESLESSTHAN ('2026-09-18 00:00:00'),
PARTITION`p20260918`VALUESLESSTHAN ('2026-09-19 00:00:00'),
PARTITION`p20260919`VALUESLESSTHAN ('2026-09-20 00:00:00'),
PARTITION`p20260920`VALUESLESSTHAN ('2026-09-21 00:00:00'),
PARTITION`p20260921`VALUESLESSTHAN ('2026-09-22 00:00:00'),
PARTITION`p20260922`VALUESLESSTHAN ('2026-09-23 00:00:00'),
PARTITION`p20260923`VALUESLESSTHAN ('2026-09-24 00:00:00')
)
exec_tenant_id: 1006
2rowsinset (0.147 sec)
ERROR:
Noquery specified
可以看到调度任务是调度失败了,根据table_id可以确认是BB表。
SELECT `TIMESTAMP`,
MODULE,
EVENT,
NAME1, VALUE1,
NAME2, VALUE2,
RET_CODE,
ERROR_MSG,
TRACE_ID
FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY
WHEREMODULE = 'DBMS_PARTITION'
ANDEVENT = 'MANAGE_DYNAMIC_PARTITION'
AND`TIMESTAMP` >= '2026-09-24 00:00:00'
AND `TIMESTAMP` < '2026-09-25 00:00:00'
ORDER BY `TIMESTAMP`;
由于发现较晚日志已经刷没了,未确认原因前先让客户暂时手动创建分区规避。
9.25日凌晨sql执行结果,留存日志,根据trace_id去过滤observer日志,
grep 'YB420A662025-000655EB376A0A4B-0-0' observer.log.xxxxx | more
+----------------------------+----------------+--------------------------+-----------------------+--------+----------------------+------------------+----------+-----------+-----------------------------------+
| TIMESTAMP | MODULE | EVENT | NAME1 | VALUE1 | NAME2 | VALUE2 | RET_CODE | ERROR_MSG | TRACE_ID |
+----------------------------+----------------+--------------------------+-----------------------+--------+----------------------+------------------+----------+-----------+-----------------------------------+
| 2026-09-25 00:00:00.054090 | DBMS_PARTITION | MANAGE_DYNAMIC_PARTITION | SUCCESS_TABLE_ID_LIST | [] | FAILED_TABLE_ID_LIST | [] | 0 | NULL | xxx
| 2026-09-25 00:00:00.071443 | DBMS_PARTITION | MANAGE_DYNAMIC_PARTITION | SUCCESS_TABLE_ID_LIST | [] | FAILED_TABLE_ID_LIST | [518786, 518909] | 0 | NULL | xxx |
+----------------------------+----------------+--------------------------+-----------------------+--------+----------------------+------------------+----------+-----------+-----------------------------------+
2 rows in set (0.047 sec)
存在set lock priority failed字样的报错,原因是:开启 enable_lock_priority 参数导致动态分区失败。
enable_lock_priority表锁优先级开关为开启,导致自动创建分区任务失败,enable_lock_priority 配置项打开后,会在 alter table路径校验 session id 是否为内部会话,如果是内部会话会直接拒绝执行,这导致依赖 inner session 执行 alter table add partition 的动态分区管理被误伤,无法新建出分区。
官方文档相关报错说明:https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005520974?back=kb
enable_lock_priority参数(默认是关闭的)说明文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005285784
客户侧因为使用过云上OB无锁表结构变更功能,将enable_lock_priority设置为ture
当前规避方案:关闭 enable_lock_priority,该参数也不建议长期打开,无锁结构变更后也建议关闭该参数,关闭语句:ALTER SYSTEM SET enable_lock_priority = FALSE;
附录
官方文档相关报错说明:https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005520974?back=kb
enable_lock_priority参数说明文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005285784
动态分区文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000005286229
END
瑞蓝创 OceanBase OBCP V4 精英训练营
点击下方图片立即了解详情


▼ 点击「阅读原文」,了解更多产品技术文章


