后台事务问题分析汇总

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

后台事务问题分析汇总

后台事务问题分析汇总

后台事务操作手册


后台事务不执行(堵塞、不触发)

情景一:后台事务监控大量【已接收】状态的任务,没有【已就绪】和【执行中】状态的任务

1.先看是不是加载任务时报错了,选择一个任务后,点击工具栏【日志】,查看有没有报错日志

如出现下图类型的日志,则分析对应的报错原因

2.没有加载报错,双击进入详情,查看【事务隔离边界】字段

如果堵塞的任务基本都是同一个隔离边界,可能对应的实例停机了,可以在查询分析器查询T_job_service表,看看有没有对应标识(FInstanceId,FServerId,FClusterName)的实例数据

如果没有对应标识的数据,可以通过隔离边界的值(一般都是服务器IP),查看对应的服务器实例是否停机了(服务器迁移或者实例异常),或者配置文件禁用了后台事务服务,导致该服务器实例产生的任务没有被加载执行;

如果有对应标识的数据,这些实例上也没有【已就绪】【执行中】的任务,那可能是加载线程有问题,最有效的办法是重启实例;

注:如果现场EAS使用了高可用多机集群,为了适应高可用,后台事务也需要配置集群,才能保证其中一台机器停机时,任务能加载到另一台机器上执行,详细配置可见后台事务配置集群分发


情景二:后台事务没有执行,后台事务监控看不到任务生成(常见于刚做完服务器迁移)

这类情况一般是触发器没有被加载,或者加载报错了,在后台事务定义报表界面(后台事务定义表)查看触发器的加载服务器,字段为空说明没有被加载,点击工具栏【日志】看最新的日志,分析步骤和情景一大致一样。

注:触发器的隔离边界,界面上没有显示,需要在查询分析器通过SQL查询T_job_trigger表的FisolationBoundary字段

select t.* from t_job_trigger t left join t_job_def d on t.fjobDefId=d.fjobDefId where d.title='事务标题'

如果是刚做完服务器迁移,因为服务器IP变动导致后台事务不执行,可以选择一下两种方案处理

在后台事务定义报表界面,把所有后台事务重新禁用启用一下

从后台把t_job_trigger表的FisolationBoundary字段将旧IP更新为新IP,然后重启服务器

通过配置文件,将后台事务读取IP写死为原来的服务器IP,详见后台事务配置IP


情景三:后台事务监控大量【已接收】【已就绪】状态的任务,也有【执行中】的任务,查一下【执行中】任务数量,初步判断是否所有线程都被任务执行占满了,工作流任务和普通业务任务要分开,一般~WF开头的是工作流任务,工作流线程是6个,普通业务线程(8.0-8.5版本需要更新补丁后为6个,没有更新补丁则3个,8.0版本PT137221,8.2版本PT,8.5版本PT135578,8.6以上都是6个)

可以通过T_job_service表存活的实例估算总共的线程数。

1.如果线程没有被占满,那【已就绪】状态的任务可能是因为和【执行中】的任务互斥,所以在【已就绪】状态,可以双击进入详情查看【互斥标识字段】

例如A、B两个相同功能的后台事务(不同的后台事务定义,参数不同),具有相同的互斥标识,当两个任务被加载到同一个实例上时,就是串行执行。这种情况下,如果和业务功能的开发确认这个功能可以并行执行,可以把两个后台事务定义的【互斥控制标识】设置成不一样的标识,重新发布即可。

注:互斥控制的标识可以自定义,如果编辑后台事务定义时,这个字段不能修改,可以使用快捷键【alt+K】

2.如果出现线程都被占满的情况,可以考虑增加实例,或者加大实例的线程数,增加并发执行能力,配置线程数方式如下:

每个实例的eas/server/profiles/serverN/config/bosconfig.xml文件,添加以下配置并重启服务

<configitem name="scheduler">

    <attribute key="maximal_concurrency" value="10" />

</configitem>


后台事务重复触发(生成重复的任务)

情景一:刚重新发布一个后台事务,出现一条重复的任务,如下图:

此后台事务定义每15分钟执行一次,在14点35分左右重新发布了后台事务,本身14点30分生成了一个任务,因为后台事务的补偿机制,事务发布时,会从事务定义的生效日期0点0分开始计算,错过多少次任务,并生成最后一次任务,所以从2018年7月7日0点计算到当前日期的14点35分,并生成了一个14点30分的任务,所以就出现了两个14点30分的任务。

注:对于一天内多次执行的事务,这个补偿机制多执行一次没有关系,如果是一天执行一次或者很长周期才执行一次的事务,建议把生效时间设置为当前日期的第二天,生成已错过的任务。


情景二:每条任务都出现重复,如下图


这种情况,一般是触发器被两个实例加载了,导致重复触发生成了任务,初步分析可以从后台事务定义报表界面(后台事务定义表)查看对应触发器,点击工具栏【日志】看触发器加载的日志

另外从触发器的加载服务器对应的实例标识,可以查询T_job_service对应实例的FLastUpdateTime字段,观察是不是每5分钟刷新一次

后台事务默认每个实例5分钟会刷新一次时间,如果出现了不到5分钟就刷新一次,说明存在两个实例在刷新同一条数据,可以初步断定存在两台服务器连着这个数据中心,因为实例的端口一样,并且程序读取到的IP也一样,导致两台服务器的实例重复加载了同一个触发器,从而生成了重复的任务。

可以通过T_job_service的FLocalIPs和FHostName字段的IP和服务器名称,排查是不是有多台EAS服务器使用相同的IP和端口,如果是多余的服务器停掉服务就可以了,如果是已知的服务器,那两台服务器的实例需要设置一个单独的IP,让实例能够区分开来,不要加载同一条数据,配置方法详见后台事务配置IP,如果是高可用多机集群的,则要配置IP和集群分发。


情景三:同一条任务出现重复执行,即一条任务执行,业务出现重复的数据

这种情况可以查询T_job_service对应实例的FLastUpdateTime字段,观察是不是每5分钟刷新一次

如果出现刷新时间突然减少了(不是5分钟递增),需要检查数据库的系统时间,以及数据库是否存在多实例集群配置,如果存在多个数据库实例,要保证所有数据库实例的系统时间要一致。

判断多个数据库实例系统时间异常,可以在查询分析器,用 SQL查询数据库的系统时间

以Oracle数据库为例,配置了rac集群

可以在查询分析器执行方言sql,多执行几次,出现host_name不同时,记录系统时间差异

select host_name,(select to_char(current_timestamp,'HH24:MI:SS')  from dual) time from v$instance


后台事务配置IP

可以通过配置文件写死ip,这样以后后台事务读取的ip就不会变,然后数据库把T_job_trigger,T_job_inst两个表的 FISOLATIONBOUNDARY 字段更新成指定的ip,重启之后就会自动加载了

注:8.2版本需要打补丁PT165878才有此功能

每个实例的eas/server/profiles/serverN/config/bosconfig.xml文件,添加以下配置

<configitem name="scheduler">

         <attribute key="local_ip" value="指定IP" />

</configitem>


后台事务配置集群分发

后台事务默认分发到当前机器的IP下,如果有高可用多机集群的情况,需要修改

eas/server/profiles/server*/config/bosconfig.xml的配置信息,将多台机器配置到同一个后台事务集群中,以实现任务集群分发的效果。

在多台机器的配置文件中添加以下配置:

<configitem name="scheduler">

    <attribute key="clusterName" value="easCluster" />

    <attribute key="default_job_isolation_level" value="cluster" />  

    <attribute key="default_trigger_isolation_level" value="none" /> 

</configitem>

注意:配置项为<config></config>的下级,clusterName的value值可自定义,下面第二条t_job_inst表的更新sql对应更新值也要修改

可以单个实例修改后重启对应的实例

 

配置完成后,需要原有的后台事务数据也指定到集群中,执行一下两条SQL,执行前可以先备份一下两个表的数据

Update t_job_trigger set FISOLATIONBOUNDARY = 'none', FHOLDERID=null where fisvalid='Y';

Update t_job_inst set FISOLATIONBOUNDARY = 'easCluster';

 


PS.文档持续更新中……



后台事务问题分析汇总.docx

后台事务问题分析汇总

后台事务问题分析汇总后台事务操作手册 后台事务不执行(堵塞、不触发)情景一:后台事务监控大量【已接收】状态的任务,没有【已就绪】和...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息