有谁知道为什么我在这里看到已处理的消息:
select 'MFS_MISSION' as queue_name, CONSUMER_NAME, MSG_STATE, count(*) from aq$MFS_MISSION_QTAB group by consumer_name, MSG_STATE
QUEUE_NAME CONSUMER_NAME MSG_STATE COUNT(*)
------------- ---------------- ------------ -----------
MFS_MISSION T1 PROCESSED 143216
MFS_MISSION S1 PROCESSED 377208
但这里不是:
select dq.queue_table, dq.queue_type, dq.name, v$aq.waiting, V$AQ.ready, V$AQ.expired, V$AQ.total_wait, V$AQ.average_wait
from V$AQ, dba_queues dq where dq.qid=v$aq.qid and dq.name like '%MISSION%'
QUEUE_TABLE QUEUE_TYPE NAME WAITING READY EXPIRED TOTAL_WAIT AVERAGE_WAIT
---------------- --------------- ---------------------- ---------- -------- ---------- ------------- ---------------
MFS_MISSION_QTAB EXCEPTION_QUEUE AQ$_MFS_MISSION_QTAB_E 0 0 0 0 0
MFS_MISSION_QTAB NORMAL_QUEUE MFS_MISSION_QUEUE 0 539002 0 0 0
MFS_MISSION_QTAB EXCEPTION_QUEUE AQ$_MFS_MISSION_QTAB_E 0 0 0 0 0
MFS_MISSION_QTAB NORMAL_QUEUE MFS_MISSION_QUEUE 0 480333 0 0 0
队列的保留时间为 0,因此消息一旦提交就应该被处理或完全消失。消息数量告诉我它们已经积累了几个月。
我很高兴得到任何指点、经验或见解。
编辑:Oracle Database 10g 版本 10.2.0.3.0
答案1
在多消费者队列中,消息会保留在队列中,直到所有订阅者都已消费该消息。我似乎认为v$aq
和之间的差异aq$MFS_MISSION_QTAB
表明显示的消息v$aq
仍在等待所有订阅者消费,以便将其标记为已处理。
aq$MFS_MISSION_QTAB
另外,您有 2 个条目MFS_MISSION_QUEUE
。这些条目有不同的所有者吗?您是否使用 RAC?