job执行时间过长导致下次执行时间推迟 只要下个10分钟到了,就另启动一个线程进行作业,早晚得死机,说说你的job干什么用的,1。照楼上的,部分或全部换成触发器2。优化优化 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不同时间段,系统数据量也不同,一般情况下,job的执行时间不超过1分钟,但是有极少数时候数据量就特别大,因此就出现了执行2,3个小时的情况,触发器对我来说没有什么用,我就是每10分钟处理一次数据而已 好像没什么特好的办法,如果这样你只能好好分析你的每条语句,然后进行优化来缩短job的执行时间。 没有什么好办法除非你把这个任务也作为一个job,用另一个job来调用,这个调用的job每10分钟执行一次 如你的任务是job1,job1只执行一次再建立一个job为job2job2的任务就是每10分钟生成一个job1,添加到job表中 果然是好思维!由于搂主说的那种情况少见,可以折中,生成job的时间间隔可以设为一个小时 其实我在最开始就给楼主建议用多线程并行来做.有些操作完全可以不要放到数据库来做,前台控制可能更方便些.象这种问题开多线程或多进程比用数据库的job要好得多.但是并行麻烦的地方在于锁的问题.我们就曾经遇到过这样的问题,只是逻辑更复杂一些,CPU,IO都是爆涨.而且死锁时不时的出来.最后实在没办法就只好串行来做了. 不太理解上面说的“每10分钟生成一个job1,添加到job表” 是什么意思?job1如果已经在跑了,job2即使再调用它,也似乎并不执行的;而且job2在调job1时,job2 也相当于在跑,如果10分钟没法完成,那也就和现在的情形一样了,没法保证10min后job2再发起任务阿。是否可以这样?新建一个job2,next time 及internal 和你原来的job1相同,internal适当可以比job1迟几秒。在job2 的逻辑中,首先判断是否你原来的job1在跑,并且this date 和this sec是否是当前的时间,如果是 ( 说明job1 是刚刚起来的),则 null,否则 (说明job1 是10分钟之前或者更早跑起来的),则执行job1 中的业务逻辑。(注意,这儿是执行job1种的业务逻辑,而并非去调用job1). 我大概可以想象楼主说的情况,计划每10分钟读取增量数据,但是绝大多数增量数据很少,所以很快执行job完毕,不会影响下一次启动。但是某一次增量数据突然很大(有可能是一次性传输过来一天或者半天的数据),对应的job没有结束的话,下一个10分钟启动不了job,是这样吧?我面临过类似问题,没有相处很好的解决办法。但是可以考虑如学海无涯苦作舟的思路,用外部程序启动,最简单的例如windows作业任务那样的,执行脚本就可以了。当然如果还有job启动不了或者在10分钟完成不了的情况,下次job可能会漂移。希望“漂流瓶”可以详细说说他的想法 用crontab或计划任务不已可以解决的! 用记事本查看Oracle控制文件 OCI8绑定输入变量的问题 高分相送。如何在pro*C中动态执行存储过程?及存储过程名作为一参数传入,如何实现?谢谢! 如何把下面的這段Sql server代碼轉換為Oracle中的代碼 请高手推荐两本oracle 方面的书!! 两个问题! 如何查找一条记录中某个字段值为"ABCDWF"的表? 求救:Oracle位运算问题 PL/SQL哪些书较好 请教:类似于 mssql 的 trigger_nestlevel() 功能在 oracle 中有没有? 数据链路创建失败 数据库导入导出的问题
除非你把这个任务也作为一个job,用另一个job来调用,这个调用的job每10分钟执行一次
再建立一个job为job2
job2的任务就是每10分钟生成一个job1,添加到job表中
但是并行麻烦的地方在于锁的问题.我们就曾经遇到过这样的问题,只是逻辑更复杂一些,CPU,IO都是爆涨.而且死锁时不时的出来.最后实在没办法就只好串行来做了.
job1如果已经在跑了,job2即使再调用它,也似乎并不执行的;
而且job2在调job1时,job2 也相当于在跑,如果10分钟没法完成,那也就和现在的情形一样了,没法保证10min后job2再发起任务阿。是否可以这样?
新建一个job2,next time 及internal 和你原来的job1相同,internal适当可以比job1迟几秒。
在job2 的逻辑中,首先判断是否你原来的job1在跑,并且this date 和this sec是否是当前的时间,如果是 ( 说明job1 是刚刚起来的),则 null,否则 (说明job1 是10分钟之前或者更早跑起来的),则执行job1 中的业务逻辑。(注意,这儿是执行job1种的业务逻辑,而并非去调用job1).
我面临过类似问题,没有相处很好的解决办法。但是可以考虑如学海无涯苦作舟的思路,用外部程序启动,最简单的例如windows作业任务那样的,执行脚本就可以了。
当然如果还有job启动不了或者在10分钟完成不了的情况,下次job可能会漂移。
希望“漂流瓶”可以详细说说他的想法