大数跨境

enable_lock_priority 开启后,动态分区自动调度失效

enable_lock_priority 开启后,动态分区自动调度失效 瑞蓝创软件
2026-10-28
4
导读:动态分区自动调度失效(V4.4.2.0)
图片

作者简介:吕彦臻,瑞蓝创数据库工程师















原创内容未经授权不得随意使用,转载请联系小编并注明来源


排查过程

集群版本: 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 精英训练营

点击下方图片立即了解详情

瑞蓝创02.png


··
·

·

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

【声明】内容源于网络
0
0
瑞蓝创软件
专注于企业信息科技战略咨询、数据中心规划及运维、智能化软件产品研发,致力于为金融、能源、电信、制造等行业提供智能的业务永续及流程自动化解决方案。
内容 87
粉丝 0
瑞蓝创软件 专注于企业信息科技战略咨询、数据中心规划及运维、智能化软件产品研发,致力于为金融、能源、电信、制造等行业提供智能的业务永续及流程自动化解决方案。
总阅读1.8k
粉丝0
内容87