Oracle单个通知事件的精确内存占用量是多少
Oracle AQ 通知事件内存占用说明
Oracle没有公开单个通知事件的固定精确值,实际占用分为固定基础开销和可变载荷开销两部分,可按以下规则计算:
- 固定基础开销:所有通知事件通用的元数据占用,为 80字节,包含事件类型、关联队列标识、触发时间戳等核心结构信息,不受消息内容影响
- 可变载荷开销:
- 若仅使用「新消息到达通知」,不传递消息本身的内容:无额外可变开销,单事件总占用稳定在80字节左右
- 若配置为通知时传递消息负载(payload):总占用 = 80字节 + 消息序列化后的实际长度,最终值向上对齐到8字节边界
- 额外关联开销:如果使用PL/SQL/OCI回调注册,每个已注册的回调会额外占用24字节内存,该开销和事件本身分开计算
高负载场景配置建议
你可以按以下步骤估算dbms_aqadm.set_watermark的合适值:
- 先统计峰值场景下的预估并发未处理通知事件总数
- 按单事件占用计算总基础开销,再叠加所有带载荷消息的总载荷大小
- 最终设置值在计算结果的基础上增加20%~30%的冗余,避免峰值时内存不足导致通知丢失
补充说明:
DBMS_AQADM.SET_WATERMARK设置的是共享池中分配给AQ通知功能的最大内存上限,过高会挤占其他数据库功能的共享池内存,过低会导致高并发下通知丢弃。你可以先按估算值上线,之后定期调用DBMS_AQADM.GET_WATERMARK查询实际运行的内存水位,再动态调整到最优值。
内容的提问来源于stack exchange,提问作者Andrew Klimov
相关产品推荐
相关产品推荐

