查看: 4735|回复: 16

[PL/SQL] 【大话IT】如何控制同时并发的任务数?

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
发表于 2014-11-23 22:52 来自手机 | 显示全部楼层 |阅读模式
假设有十个没有依赖关系的任务,1----10,我利用任务进行并发调用,但是同时调用10个任务系统性能不足,效率反而不高,同时调用三个任务系统性能和效率是最优的,那么我如何限制同时执行的任务数辆是3呢,加入先执行123再执行456这样三个一组执行的话,假如说其中一个运行时间过长,比如说2,3执行只要五分钟,1执行要一个小时,那么系统其实55分钟都没有完全利用,现在我希望这样先执行123,等到1执行完毕,自动执行4,-----,这样系统始终保持三个任务同时并发,该如何做
论坛徽章:
527
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-11-24 01:27 | 显示全部楼层
自己再写个调度过程。每个任务都把自己的进度写入到表里。这个调度过程每隔几秒(用DBMS_LOCK.SLEEP)查看一下哪个执行完了,然后根据需要启动下一个(提交一个JOB让它运行)。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
 楼主| 发表于 2014-11-24 09:41 | 显示全部楼层
我现在用的就是这种方法,不过我希望有更简单的方案,因为这个方案我觉得有点不太好,DBMS_LOCK.SLEEP的间隔也会造成资源浪费

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2014-11-24 09:58 | 显示全部楼层
试试看 DBMS_SCHEDULER 包
里面有个CREATE_EVENT_SCHEDULE方法,可能就是你想要的,供你参考下

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
 楼主| 发表于 2014-11-24 21:02 来自手机 | 显示全部楼层
这个可以,多谢了,不过控制起来代码量很大,我要想想

使用道具 举报

回复
论坛徽章:
17
2013年新春福章
日期:2013-02-25 14:51:242015年新春福章
日期:2015-03-04 14:53:16马上加薪
日期:2014-12-18 01:09:30祖国65周年纪念徽章
日期:2014-09-27 08:49:22马上有房
日期:2014-07-16 11:59:32优秀写手
日期:2014-07-10 06:00:12马上加薪
日期:2014-04-20 23:04:51马上有对象
日期:2014-04-19 23:32:33马上有车
日期:2014-03-29 23:05:24问答徽章
日期:2014-01-17 15:19:03
发表于 2014-11-24 21:29 | 显示全部楼层
想想一般依赖调度的话,至少需要有几个表什么的,初步想想比方调度表,依赖关系表,状态表,结果表

使用道具 举报

回复
论坛徽章:
527
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-11-24 22:46 | 显示全部楼层
songzhxp 发表于 2014-11-24 09:41
我现在用的就是这种方法,不过我希望有更简单的方案,因为这个方案我觉得有点不太好,DBMS_LOCK.SLEEP的间隔 ...

如果没有SLEEP只有死循环,那是很耗CPU的;有了SLEEP就不会。

使用道具 举报

回复
认证徽章
论坛徽章:
24
SQL极客
日期:2013-12-09 14:13:35林肯
日期:2013-09-24 09:14:33保时捷
日期:2013-08-16 08:59:20Jeep
日期:2013-08-27 15:03:32ITPUB社区千里马徽章
日期:2013-06-09 10:15:34SQL数据库编程大师
日期:2013-12-06 13:59:43SQL大赛参与纪念
日期:2013-12-06 14:10:502010新春纪念徽章
日期:2010-03-01 11:20:00生肖徽章:猪
日期:2013-12-06 14:22:18生肖徽章:狗
日期:2013-12-06 14:22:18
发表于 2014-11-25 09:38 | 显示全部楼层
这个是我自己写的并发调度控制的方法,仅供参考 过程控制.zip (83.35 KB, 下载次数: 55)

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-16 06:00:13
 楼主| 发表于 2014-11-25 15:28 | 显示全部楼层
谢谢了,这个下来仔细看看,很完整的一套方案,我消化一下

使用道具 举报

回复
论坛徽章:
15
马上加薪
日期:2014-12-03 12:48:23双子座
日期:2016-01-15 10:47:09秀才
日期:2016-01-13 12:14:26秀才
日期:2015-12-25 15:31:10双子座
日期:2015-12-15 09:58:52巨蟹座
日期:2015-11-17 17:17:02白羊座
日期:2015-11-09 13:49:13双子座
日期:2015-11-02 10:25:11秀才
日期:2015-09-21 09:46:16水瓶座
日期:2015-08-25 15:30:04
发表于 2014-11-26 16:57 | 显示全部楼层
可以借鉴自动化运维工具的方法,通过resource来控制。设计一张表,每一行就是一个资源,运行任务更新一条,结束后更新回状态。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表