暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle高级队列出列吞吐量

askTom 2017-09-12
218

问题描述

我是开发人员,而不是DBA,所以对此有足够的了解是危险的。
我有一个使用多个站点上相当标准的脚本设置队列。我用过这个:http://www.oracle-developer.net/display.php?id=411
当它被加载时,故障就开始了。我有大约270个请求在10秒内被排队。前10个非常迅速地出队并进行处理。出队过程执行的任务可以持续15秒到一个小时。所有DML都将立即提交,因此不应存在不断增长的事务。我已经阅读了我能找到的每个文档,但无法确定如何控制队列将同时运行的异步任务的数量。
理想情况下,我想启动200并发进程,因此队列中的所有项目都同时出队和处理。实际上,所有200工作都需要大约8个小时才能最终清除,因为出队所需的时间越来越长。
我已经查看了多个订户,但是我的理解是,这将针对不同的任务多次在队列中运行行。我在创建表时使用了param multiple_consumers => TRUE,但是我再次认为这是用于同一行的多个处理,而不是单个任务的并行处理。我只有一个任务,我需要为队列中的每一行处理。我只需要更多的并发进程同时运行。我以为这将是一个简单的参数,但找不到它。当我查看日志记录时,一旦资源可用,排队的任务似乎正在等待出队。
所以总结一下,我需要提高队列的吞吐量。对此的任何帮助将不胜感激。
非常感谢

专家解答

您是否使用PL/SQL通知出队?如果是这样,您无法控制有多少出队进程:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:8178644100346656339

但是,如果你想同时运行270进程,有一个更基本的问题:

您的系统是否有能力处理270并发请求?

简而言之,如果每个进程消耗1个CPU线程,而您只有8个可用,则一次只能处理8个作业。所以其他262将不得不等待。现实世界将比这更复杂,进程做IO等。但是很可能会争夺硬件资源。

因此,除非您的数据库上有大量的备用容量,否则您的数据库很可能无法应付所有一起开始的队列。

这带来了另一个问题:

为什么这些是单独的过程?你能把它们合二为一吗?

例如,不是开始200单行更新,你可以运行一个更新,改变200行?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论