只要下个10分钟到了,就另启动一个线程进行作业,早晚得死机,说说你的job干什么用的,
1。照楼上的,部分或全部换成触发器
2。优化优化

解决方案 »

  1.   

    不同时间段,系统数据量也不同,一般情况下,job的执行时间不超过1分钟,但是有极少数时候数据量就特别大,因此就出现了执行2,3个小时的情况,触发器对我来说没有什么用,我就是每10分钟处理一次数据而已
      

  2.   

    好像没什么特好的办法,如果这样你只能好好分析你的每条语句,然后进行优化来缩短job的执行时间。
      

  3.   

    没有什么好办法
    除非你把这个任务也作为一个job,用另一个job来调用,这个调用的job每10分钟执行一次
      

  4.   

    如你的任务是job1,job1只执行一次
    再建立一个job为job2
    job2的任务就是每10分钟生成一个job1,添加到job表中
      

  5.   

    果然是好思维!由于搂主说的那种情况少见,可以折中,生成job的时间间隔可以设为一个小时
      

  6.   

    其实我在最开始就给楼主建议用多线程并行来做.有些操作完全可以不要放到数据库来做,前台控制可能更方便些.象这种问题开多线程或多进程比用数据库的job要好得多.
    但是并行麻烦的地方在于锁的问题.我们就曾经遇到过这样的问题,只是逻辑更复杂一些,CPU,IO都是爆涨.而且死锁时不时的出来.最后实在没办法就只好串行来做了.
      

  7.   

    不太理解上面说的“每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).
      

  8.   

    我大概可以想象楼主说的情况,计划每10分钟读取增量数据,但是绝大多数增量数据很少,所以很快执行job完毕,不会影响下一次启动。但是某一次增量数据突然很大(有可能是一次性传输过来一天或者半天的数据),对应的job没有结束的话,下一个10分钟启动不了job,是这样吧?
    我面临过类似问题,没有相处很好的解决办法。但是可以考虑如学海无涯苦作舟的思路,用外部程序启动,最简单的例如windows作业任务那样的,执行脚本就可以了。
    当然如果还有job启动不了或者在10分钟完成不了的情况,下次job可能会漂移。
    希望“漂流瓶”可以详细说说他的想法
      

  9.   

    用crontab或计划任务不已可以解决的!