Oracle10g Oracle AQ异步通知

Oracle10g Oracle AQ异步通知,oracle10g,oracle-aq,Oracle10g,Oracle Aq,我计划在OLTP应用程序中使用Oracle AQ异步通知功能。在高峰时间,它排队的消息数可能在一分钟内增加到1000条。出列回调过程将处理该消息,并将一个条目插入到由消息类型确定的表中 我关心的是,它生成的大量排队通知(每个通知依次调用的PL/SQL回调过程)是否会导致数据库争用? 为此,建议使用异步通知,还是应该使用出列轮询过程,在该过程中,我可以在连续循环中一次出列一条消息 我的数据库版本是10gR2 非常感谢您的专家帮助 对于排入队列的每条消息,ORACLE后台进程通过创建调度程序作业来调

我计划在OLTP应用程序中使用Oracle AQ异步通知功能。在高峰时间,它排队的消息数可能在一分钟内增加到1000条。出列回调过程将处理该消息,并将一个条目插入到由消息类型确定的表中

我关心的是,它生成的大量排队通知(每个通知依次调用的PL/SQL回调过程)是否会导致数据库争用? 为此,建议使用异步通知,还是应该使用出列轮询过程,在该过程中,我可以在连续循环中一次出列一条消息

我的数据库版本是10gR2


非常感谢您的专家帮助

对于排入队列的每条消息,ORACLE后台进程通过创建调度程序作业来调用相关的回调过程。
如果依赖于回调过程,您预计一分钟内会收到1000条消息,这会增加ORACLE后台进程的负载,并且还会创建许多一次性调度程序作业,同样,如果创建的并行调度程序作业数量超过“作业队列进程”(ORACLE参数)在数据库中配置的延迟消息处理的值,如果您选择使用AQ listener进行轮询以退出队列,则单个作业可以处理队列中的所有消息。

对于手动退出队列过程,是否建议提交一个24*7运行的一次性计划程序作业(保留1个作业槽)该过程是否在无限循环中以等待模式运行dequeue命令?是否有更好的解决方案可以在后台连续运行出列进程?一个无限循环作业不是一个好选项,因为过程会连续运行,即使没有要出列的消息。。。相反,创建一个过程,在循环中使用dbms_aq侦听器将消息从队列中出列。如果队列中有任何消息,侦听器允许您将消息出列,否则它会引发侦听器超时异常。。。使用异常退出循环..以便过程仅在队列中至少有一条消息时运行。您可以根据此过程的要求创建一个或多个作业。谢谢您的建议!据我所知,具有AQ listener命令的过程应该通过一个调度程序作业来执行,该调度程序作业运行24*7来侦听消息。即使采用这种方法,作业也将占用1个永久插槽并持续运行。我理解错了吗?你能再详细一点吗?有没有办法避免连续作业?顺便说一句,与我的方法一样,dequeue命令在循环内以等待模式运行。如果没有消息,它只是等待消息到达。我猜这类似于侦听阻塞调用。我的意思是,以特定的间隔(比如10秒)安排作业,如果队列中有任何消息,此作业将继续处理,一旦完成对所有消息的处理,它就会抛出LISTER\u TIME\u异常,退出循环,并在指定的时间间隔后重复相同的过程。