基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
专有云大数据量 INSERT 操作触发并行 DML 导致数据字典锁争用问题分析
更新时间:2026-08-27 06:26
问题现象
在执行带有并行 DML(PDML)Hint 的大数据量 INSERT 语句时,系统出现大量 INSERT INTO __all_monitor_modified 操作,导致数据字典写入延迟,引发锁冲突。具体表现为:
- CPU 使用率持续处于高位(90% - 95% 以上)。
- SQL 响应时间显著增加。
- 在 OCP 中可观察到相关 SQL 为 Top SQL。
问题原因
当执行带有并行 DML 的 INSERT 语句时,若涉及对同一张表的不同数据范围进行并行插入,会触发 Online 统计信息收集机制。该机制在执行过程中会频繁向内部表 __all_monitor_modified 写入监控记录,造成大量数据字典写入操作,进而引发锁竞争和性能瓶颈。
此行为为系统设计行为(By Design),并非 Bug,但在高并发、大数据量场景下可能引发性能问题。
关键信息
INSERT INTO __all_monitor_modified语句执行结果仅返回错误码-6003和-6005,表明为锁等待或资源争用异常。- 问题与
_optimizer_gather_stats_on_load参数状态直接相关,该参数控制是否在数据加载时自动收集统计信息。 - 通过 OCP 可观察到相关 SQL 为 Top SQL,响应时间异常高,且 CPU 使用率持续处于高位。
问题的风险及影响
- SQL 执行响应时间显著增加。
- CPU 使用率持续高位(90% - 95% 以上)。
- 频繁出现数据字典锁冲突。
- 影响并发性能,可能导致业务操作延迟或超时。
适用版本
所有版本。
解决方法
- 临时应急处理:在执行 PDML INSERT 语句时,添加 Hint
/*+ NO_GATHER_OPTIMIZER_STATISTICS */,以禁用自动统计信息收集。 - 会话级关闭:执行
ALTER SESSION SET "_optimizer_gather_stats_on_load" = 0;,关闭当前会话的在线统计信息收集功能。
规避方式
- 在执行大数据量并行 DML 插入操作前,确认是否必须收集统计信息。若非必要,建议通过
/*+ NO_GATHER_OPTIMIZER_STATISTICS */Hint 显式禁用。 - 可临时关闭
_optimizer_gather_stats_on_load参数,避免在批量加载时触发频繁的统计信息收集。 - 避免在高并发场景下对同一张表的多个分区或范围同时执行 PDML 操作,以降低触发统计信息收集的频率。