(本文档仅供参考)
问题
计划任务执行机制是什么?
解决方案
计划任务执行机制说明:
目前产品的计划任务每个节点支持最大为10个计划,就是说同一个时间段最大只有10个计划在执行,若在高频率的情况下执行计划任务,而一个计划任务的执行本身也是需要时间的,基于计划任务本身的排队机制,在进入启动时间时,没有获取到对应的节点进行执行的情况,就会等待其他计划任务结束。而同一个计划中的多个任务是按照顺序执行的,即等第一个任务执行完成,会顺序执行第二个任务,以此类推,直到整一个计划中的所有任务都执行完成,然后再释放,进入执行下一个计划。
正常在实际任务中存在抽数的计划任务,抽取的计划任务不能和清除临时表的任务在同一时间刻执行,因为清除临时表的任务会影响抽取的计划任务,这些清除计划任务是在产品中有默认自带执行的计划中,建议在时间上不要和产品自带的时间相同。
对于存在前后执行顺序的任务放在同一个计划任务一起执行,比如说报表发送要在数据更新完成后执行,即【发送报表的任务】要做【抽取数据任务】之后,这样计划启动后,任务会排队执行,但这个要注意,若前一个任务如果不成功,就不能执行后一个,同一个计划中的任务是属于顺序排队执行的,只有第一个任务执行成功后,才会执行第二个计划任务,依次排队执行。
注意:
计划任务设置不合理有可能会互相造成影响,并且如果本身存在频繁大数据量抽取,不建议直接通过计划任务抽取,建议是采用专业的ETL工具执行,因为计划任务频繁的执行是需要消耗服务器内存的,会对用户使用造成一些影响。
另外目前是没有办法查出当前节点此刻有多少任务正在执行。
问题
1、任务调度这块在相同时间下多个任务执行顺序是什么?按照什么策略?
2、任务执行是并发还是串行执行? 任务出现异常如何处理?
3、现在是三台机子负载,调度任务哪台机子起?调度机器挂了怎么办?选举机制是什么?
解决方案
1、计划调度的顺序是先到先执行的策略:
1)服务器启动阶段:对于当前的整个计划列表进行一次过期判断,对过期计划立即执行且只执行一次(过期任务指未在正常时间执行的任务,如原本10点需要执行的计划,结果9点50分系统宕机,然后在10点10分进行重启时,该计划则会被判断为过期计划);
2)服务器正常运行阶段:服务器正常按照计划指定时间执行,计划之间互不干扰独立运行;值得注意的是,手动执行的调度与自身、手动执行的调度与周期执行的调度属于多个计划;
3)服务器超负荷运行阶段:一台正常运行计划任务的服务器同时最大负载目前默认为10个;若当前已满计划运行时,超出负荷的计划将被延迟,直到服务器有空闲线程处理该计划;多个超时计划被延期后,其执行顺序目前是随机不可控的(对于v97及其以上的版本,会优先手动计划的执行)。
2、计划中的任务与异常:
1)上文中提到计划之间是独立运行的,互不干扰,但是一个计划内的多个任务是串行执行,即按照设置计划时候的任务顺序执行;
2)计划内的串行任务遇到某个任务执行异常时,当前任务停止,不回滚已执行的任务,并且接下来的所有任务均不执行;
3)服务器宕机时,对于正在执行中的计划将会被抛弃。
3、计划任务在集群环境下:
1)Smartbi的集群环境下,不做任何干预则每台服务器均含有计划任务的调度功能和执行功能,目前通过扩展包可以取消指定服务器的执行权限;
2)若有多个节点拥有计划任务的执行功能,则一个计划有均等的可能性被分派到每个结点执行,但只会分配到某一个节点执行,保证计划只会被执行一次;
3)若拥有计划任务的执行功能的结点宕机,则该结点执行中的任务将会被抛弃.