我正在使用带有Java JMS API的高级排队(AQ)的oracle数据库[11.2]。 我当前的oracle设置是默认设置,没有额外的调整参数。 高层架构:
数据库将消息排入持久队列(按优先级排序)
EXEC DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 'order_queue_table', queue_payload_type => 'aqadm.order_message_t', sort_list=>'PRIORITY,ENQ_TIME');
EXEC DBMS_AQADM.CREATE_QUEUE (queue_name => 'order_queue', queue_table => 'order_queue_table');
EXEC DBMS_AQADM.START_QUEUE (queue_name => 'order_queue');
Java JMS使用者是具有3个并发线程的出列消息。
一切都很棒!和快乐的场景一样,只要队列中的消息@ 10K。 一旦队列中的消息加倍或三倍 出列 ,性能就会大幅下降!!!
我按照以下链接 http://docs.oracle.com/cd/B28359_01/server.111/b28420/perform.htm
有关IO和AQ性能调优的任何建议吗?
答案 0 :(得分:3)
我看到这是旧的,但我会试一试。它运行良好,队列中的消息数量很少,但是大量(r)消息很少,这让我相信问题可能出在底层队列表和IOT的优化器统计中。 / p>
来自11gR2 Oracle Advanced Queuing User's Guide:
确保收集统计信息以便进行最佳查询 正在选择检索邮件的计划。默认情况下,队列 表格被锁定,不会自动收集统计信息。该 建议用法是使用代表队列收集统计信息 消息加载并锁定它们。
还有其他几种可能性,包括调整(或不调整)AQ_TM_PROCESSES
和使用ASSM,但如果没有更多关于数据库环境的信息,很难提出修复建议,甚至不知道是否存在问题。