2

我正在使用带有 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 的性能调整有什么建议吗?

4

1 回答 1

3

我看到这是旧的,但我会试一试。它在队列中的少量消息运行良好但在大量消息的情况下运行不佳这一事实使我相信问题可能出在底层队列表和 IOT 的优化器统计信息中。

11gR2 Oracle 高级队列用户指南

确保正在收集统计信息,以便选择用于检索消息的最佳查询计划。默认情况下,队列表被锁定,无法自动收集统计信息。推荐的用途是收集具有代表性的队列消息负载的统计数据并锁定它们。

还有其他几种可能性,包括调整(或不调整)AQ_TM_PROCESSES和使用 ASSM,但如果没有更多关于您的数据库环境的信息,就很难提出修复建议,甚至很难知道这是否是问题所在。

于 2013-05-30T14:43:26.447 回答