基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
集群 DDL 全部 hung 住无法执行
更新时间:2026-08-25 02:41
问题现象
用户执行 DDL 操作时出现卡顿,所有会话中的 DDL 操作均被阻塞。
问题原因
OceanBase 集群的 DDL 执行采用并行与串行相结合的模式:
- 并行 DDL 会获取 Schema 对象锁的读锁,可以并行执行。
- 串行 DDL 会获取 Schema 对象锁的写锁,需要串行执行。
为了保证在持续不断的并行 DDL 操作下,串行 DDL 不会被“饿死”,系统对 Schema 对象锁实现了写锁阻碍读锁的机制。具体表现为:当一个线程正在等待获取写锁时,后续所有尝试获取读锁的线程都必须等待该写锁线程成功获取锁并执行完成后,才能继续获取读锁。
因此,如果集群中有一个 DDL 操作因未知原因卡住,随后又发起了一个串行 DDL 任务,该串行 DDL 会尝试获取写锁。根据上述机制,后续所有尝试获取读锁(即发起并行 DDL)的线程都将被阻塞,最终可能导致整个集群的 DDL 操作全部卡住,无法继续执行。
关键信息
- 日志定位:从 RootService 日志中,可以观察到后续被卡住的 DDL 操作中包含串行 DDL。
- 阻塞点:所有被卡住的 DDL 操作,其堆栈信息均显示在尝试获取 DDL 锁(
try to get ddl lock)处停滞。
问题的风险及影响
集群内所有 DDL 操作被挂起(hung),无法执行。
适用版本
OceanBase 数据库 4.x 版本。
解决方法
需要定位并解决最初导致卡住的 DDL 操作(即问题根源)。必须使该 DDL 操作成功执行或失败回滚后,后续被阻塞的 DDL 任务才能继续执行。
规避方式
需要定位并解决最初导致卡住的 DDL 操作(即问题根源)。必须使该 DDL 操作成功执行或失败回滚后,后续被阻塞的 DDL 任务才能继续执行。