news 2026/3/12 17:02:58

Oracle AQ性能救星:手动合并索引,让队列速度飙升90%!​

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle AQ性能救星:手动合并索引,让队列速度飙升90%!​

为了不错过每一期干货,强烈建议关注我

写技术文章,纯属“为爱发电”;更新不易,希望大家能够多多支持

1️⃣ 点赞的人,今年都升职加薪了

2️⃣ 点在看人,今年一定会发财

3️⃣ 评论区交流技术,每条留言都会回复

问题描述

在 Oracle 高级队列(AQ)中,队列表(Queue Table)有几个关键的索引组织表(IOT)和索引,它们直接影响入队(Enqueue)和出队(Dequeue)的性能。

默认情况下,队列监控进程(QMON)会自动清理出队索引(名称类似AQ$_<队列表名>_I)的碎片,但有一个例外:如果队列表存放在 ASSM 表空间里,它可能不会自动清理(具体见 KB127779)。

更重要的是,在 Oracle 11.1.0.7 及更早的版本中,QMON 进程从来不会自动清理以下三种 IOT:

  1. 时间管理 IOT(名称带_T
  2. 历史 IOT(名称带_H
  3. 溢出 IOT(名称带_D

如果不定期整理这些 IOT/索引,它们会变得碎片化,导致:

  • 队列性能下降(入队/出队变慢)
  • QMON 进程消耗更多 CPU
  • 生成更多重做日志(Redo)

因此,对于 11.2 之前的版本,定期手动“重建”或“合并”这些索引/IOT 是非常有益的。

下面简单了解手动合并高级队列(AQ)相关索引的步骤:保持队列性能,降低QMON CPU使用与重做日志生成

不同 Oracle 版本的区别

11.2 版本之后

从 11.2 开始,QMON 进程通常会自动维护所有与队列表相关的索引和 IOT,目的是防止出队操作因索引碎片而变慢。

它是怎么做的?
QMON 会在出队调用过程中,识别出空的索引页,并将它们释放回段的空闲列表。这个过程不是真正的索引重建,但能有效保持性能。你可以通过查询GV$PERSISTENT_QMN_CACHE视图来查看释放了多少索引页。

但是,自动清理不是万能的!
在某些特定场景下(例如“按消息ID出队”或“按条件出队”),出队操作可能不会遍历到那些空索引页,因此 QMON 也无法释放它们。

所以,即使在 11.2 之后,你仍然可以手动重建索引。特别是当你发现出队性能有问题,或者我们可以通过设置初始化参数_aq_tm_scanlimit=0(并重启实例)禁用了自动维护功能时。

10g 和更早的版本

在 10g 中,有一个未公开的 Bug 修复(Bug 2890421)帮助减少了 QMON 生成的重做日志量,但上述手动维护步骤在 10.1 到 11.1.0.7 版本中仍然非常有益。注意,这个修复无法向后移植到 9.2 或更早版本。

具体要做什么操作呢?

核心操作分为两类,取决于你的队列是单消费者还是多消费者

1. 对于多消费者队列表:
你需要对几个 IOT 执行COALESCE(合并)操作:

ALTERTABLEAQ$_<队列表名>_ICOALESCE;-- 出队 IOTALTERTABLEAQ$_<队列表名>_TCOALESCE;-- 时间管理 IOTALTERTABLEAQ$_<队列表名>_HCOALESCE;-- 历史 IOTALTERTABLEAQ$_<队列表名>_DCOALESCE;-- 溢出 IOT (可能存在,也可能不存在)

2. 对于单消费者队列表:
你需要对几个索引执行REBUILD ONLINE(在线重建):

ALTERINDEXAQ$_<队列表名>_I REBUILD ONLINE;-- 出队索引ALTERINDEXAQ$_<队列表名>_T REBUILD ONLINE;-- 时间管理索引

注意:如果你用的是 Standard Edition(标准版),必须去掉ONLINE关键字,因为标准版不支持在线重建。

额外操作:
还会重建两个复制队列表DEF$_AQCALLDEF$_AQERROR上的索引。

重要注意事项

  • 执行时机:你可以在队列正在运行(入队/出队进行中)时执行这些操作,但前台进行队列操作的会话可能会感到性能下降
  • 推荐频率:建议至少每天运行一次,最好在数据库负载较低的时段(例如深夜)。
  • 关于单消费者队列:根据另一篇文档(Note 1622498.1),由于 Bug 17480600 的影响,最好在停止单消费者队列后,再重建其索引。如果已经应用了该 Bug 的修复,则可以在线进行。

如何自动化?提供一个存储过程

Oracle 提供了一个名为aqcoalesce的存储过程,可以自动遍历数据库中的所有队列表,并执行相应的重建或合并操作。

如何设置?

  1. 将原文中从create or replace procedure aqcoalesce as ...开始的整个代码块保存为一个 SQL 脚本文件(例如aqcoalesce.sql)。
  2. SYS用户身份登录数据库并执行这个脚本:
    sqlplus"sys/<你的密码> as sysdba"@aqcoalesce.sql

如何使用?

  • 手动执行
    EXECaqcoalesce;
  • 定时任务(例如每天凌晨0点运行)
    VARIABLE jobno NUMBER;EXECDBMS_JOB.SUBMIT(:jobno,'aqcoalesce',TRUNC(SYSDATE)+1,'SYSDATE+1');COMMIT;
    • 如果想在早上8点运行,把TRUNC(SYSDATE) + 1改为TRUNC(SYSDATE) + 1 + 8/24

过程逻辑简述:
这个过程会通过查询DBA_QUEUE_TABLES等数据字典视图,找出所有的单消费者和多消费者队列表,然后根据其兼容性版本(8.0, 8.1, 10.0等),动态生成并执行对应的ALTER INDEX ... REBUILDALTER TABLE ... COALESCE语句。它还会处理可能不存在的溢出 IOT(_D)。

一个更稳妥的替代方案(针对单消费者队列)

如果你担心在线重建索引时出现问题,可以采用一个更保守的“停止-重建-启动”工作流程:

  1. 首先,停止所有关联的队列。
  2. 然后,重建索引。
  3. 最后,重新启动这些队列。

原文在最后提供了一段示例代码框架,展示了如何在aqcoalesce过程中嵌入停止和启动队列的逻辑(使用DBMS_AQADM.STOP_QUEUEDBMS_AQADM.START_QUEUE)。你可以根据需要将此逻辑集成到主过程中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 6:20:47

电脑没有键盘或完全失灵,怎么输入控制电脑?-「应急方案」

原文首发自&#xff1a;电脑键盘坏了/没有键盘怎么打字&#xff1f; 方法一&#xff1a;Windows自带的虚拟键盘 已进入系统的情况下 > 路径1&#xff1a;按下 Windows Ctrl O即可打开电脑屏幕键盘功能&#xff0c;再次按下关闭。 > 路径2&#xff1a;打开「开始菜单」…

作者头像 李华
网站建设 2026/3/4 13:15:05

升级ComfyUI后效率翻倍,Qwen-Image-2512推理更快了

升级ComfyUI后效率翻倍&#xff0c;Qwen-Image-2512推理更快了 1. 为什么这次升级值得你立刻动手 最近在本地跑Qwen-Image时总感觉卡顿&#xff1f;出图要等半分钟&#xff1f;提示词改三次才勉强满意&#xff1f;别急着换显卡——问题可能不在硬件&#xff0c;而在你用的Com…

作者头像 李华
网站建设 2026/3/12 9:53:20

STM32初学者必备:Keil5安装操作指南

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。我以一位深耕嵌入式教学十余年的工程师视角&#xff0c;摒弃模板化表达、弱化“教程感”&#xff0c;强化 真实开发语境中的逻辑脉络、踩坑经验与工程权衡 &#xff0c;同时严格遵循您提出的全部优化要求&a…

作者头像 李华
网站建设 2026/3/7 9:24:13

AI初学者福音:YOLOv13镜像让目标检测不再难

AI初学者福音&#xff1a;YOLOv13镜像让目标检测不再难 你有没有过这样的经历&#xff1a;刚学完目标检测基础概念&#xff0c;兴致勃勃想跑通第一个模型&#xff0c;结果卡在了CUDA版本不匹配、PyTorch安装失败、Flash Attention编译报错上&#xff1f;查了几十个GitHub issu…

作者头像 李华
网站建设 2026/3/3 10:09:03

零基础入门语音理解,用SenseVoiceSmall做多语种情感分析

零基础入门语音理解&#xff0c;用SenseVoiceSmall做多语种情感分析 你有没有试过听一段客户投诉录音&#xff0c;却要花十几分钟反复回放才能判断对方是生气还是失望&#xff1f;或者在整理跨国会议录音时&#xff0c;一边听日语发言、一边记英文笔记&#xff0c;最后发现漏掉…

作者头像 李华
网站建设 2026/3/10 23:22:39

非技术人员也能操作!GLM-4.6V-Flash-WEB中文提示部署

非技术人员也能操作&#xff01;GLM-4.6V-Flash-WEB中文提示部署 你是否遇到过这样的场景&#xff1a;客户会议室里&#xff0c;老板临时要求演示AI看图识物能力&#xff1b;工厂质检现场&#xff0c;系统宕机急需快速识别异常图像&#xff1b;高校实验室里&#xff0c;学生想…

作者头像 李华