检测数据库节点健康状况的方法及装置转让专利

申请号 : CN201110260846.5

文献号 : CN102982037B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王晓征肖爱元

申请人 : 中国移动通信集团浙江有限公司

摘要 :

本发明公开了检测数据库节点健康状况的方法及装置。方法包括:对于任一oracle RAC数据库节点,在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态,根据该活跃会话状态计算该采样周期内该数据库节点的异常等待会话占比;判断所述异常等待会话占比是否大于预设第一阈值,若是,判断该采样周期内该数据库节点是否存在最严重等待会话,若存在,判定该采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,对该数据库节点执行关闭终止操作。本发明实现了对oracle RAC数据库节点健康状况的自动实时检测。

权利要求 :

1.一种检测数据库节点健康状况的方法,其特征在于,该方法包括:

对于任一oracle真正应用集群RAC数据库节点,在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态,根据该活跃会话状态计算该采样周期内该数据库节点的异常等待会话占比;

判断所述异常等待会话占比是否大于预设第一阈值,若是,判断该采样周期内该数据库节点是否存在最严重等待会话,若存在,判定该采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,对该数据库节点执行关闭终止操作;

所述计算该采样周期内该数据库节点的异常等待会话占比包括:

统计该采样周期内该数据库节点正常执行的活跃会话数En、空闲等待的活跃会话数Iw、异常等待的活跃会话数Wt;

计算该采样 周期内 该数据库节点的 异常等待会话占比 p( Wt )为 :

2.根据权利要求1所述的方法,其特征在于,当所述数据库节点属于高并发在线事务处理OLTP系统时,所述第一阈值的取值为90%;

当所述数据库节点属于数据分析决策支持系统DSS时,所述第一阈值的取值为85%。

3.根据权利要求1所述的方法,其特征在于,所述当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:计算该采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms)为:A(Ms)=Msn/第一时长,其中,Msn为该采样周期内该数据库节点当前实例的最严重等待会话数;

判断A(Ms)>b是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,b为预设第二阈值。

4.根据权利要求1所述的方法,其特征在于,所述在每个采样周期内, 抓取最近第一时长内该数据库节点的活跃会话状态进一步包括:抓取最近第一时长内该数据库节点的全局队列等待数GEwn;

计算该采样周期内该数据库节点当前实例的全局队列等待占比p(GEw)为:p(GEw)=GEwn/GEn,其中,GEn为该采样周期内该数据库节点当前实例的全局队列总数;

且,当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:

判断p(GEw)>c是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,c为预设第三阈值。

5.根据权利要求1所述的方法,其特征在于,所述在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态进一步包括:抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn;

计算该采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw)为:p(GCw)=GCwn/A(GC),其中,A(GC)为该数据库节点当前实例的全局缓存交互平均值,A(GC)=第二时长内该数据库节点当前实例的全局缓存交互量/第二时长;

且,当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:

判断p(GCw)>d是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,d为预设第四阈值。

6.根据权利要求1所述的方法,其特征在于,所述当判定该采样周期内该数据库节点存在最严重等待会话后,进一步包括:计算当前块延迟BRL,判断BRL>e是否成立,若是,执行所述判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点的动作,其中,e为预设第五阈值。

7.根据权利要求6所述的方法,其特征在于,当所述数据库为OLTP系统时,所述e的取值为5ms。

8.根据权利要求1所述的方法,其特征在于,当判定该数据库节点已连续预设数目个采样周期被判定为不健康节点后,进一步包括:判断该数据库节点的异常等待会话是否已经自我恢复,若否,执行所述对该数据库节点执行关闭终止操作的动作;否则,不执行所述对该数据库节点执行关闭终止操作的动作。

9.一种检测数据库节点健康状况的装置,其特征在于,该装置包括:

活跃会话状态检测模块:在每个采样周期内,抓取最近第一时长内本oracle RAC数据库节点的活跃会话状态,将该活跃会话状态发送给异常会话分析模块;

异常会话分析模块:接收所述活跃会话状态,根据该活跃会话状态计算当前采样周期内该数据库节点的异常等待会话占比,将该异常等待会话占比和当前采样周期内是否存在最严重等待会话信息发送给健康检测模块;

健康检测模块:接收所述异常等待会话占比和是否存在最严重等待会话信息,判断该异常等待会话占比是否大于预设第一阈值,若是,判断所述是否存在最严重会话信息是否指示当前采样周期内该数据库节点存在最严重等待会话,若存在,判定当前采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,对该数据库节点执行关闭终止操作;

所述计算该采样周期内该数据库节点的异常等待会话占比包括:

统计该采样周期内该数据库节点正常执行的活跃会话数En、空闲等待的活跃会话数Iw、异常等待的活跃会话数Wt;

计算该采样 周期内 该数据库节点的 异常等待会话占比 p( Wt )为 :

10.根据权利要求9所述的装置,其特征在于,所述异常会话分析模块进一步用于,计算当前采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms),将A(Ms)发送给健康检测模块;

所述健康检测模块进一步用于,在判定异常等待会话占比大于预设第一阈值后,判断所述A(Ms)>b是否成立,若是,执行所述判断当前采样周期内 该数据库节点是否存在最严重等待会话的动作,其中,b为预设第二阈值。

11.根据权利要求9所述的装置,其特征在于,所述装置进一步包括:全局队列监控模块,用于在每个采样周期内,抓取最近第一时长内本oracleRAC数据库节点的全局队列等待数GEwn,计算当前采样周期内该数据库节点当前实例的全局队列等待占比p(GEw),将p(GEw)发送给健康检测模块;

且,所述健康检测模块进一步用于,当判定所述异常等待会话占比大于预设第一阈值后,判断p(GEw)>c是否成立,若是,执行所述判断当前采样周期内该数据库节点是否存在最严重等待会话的动作,其中,c为预设第三阈值。

12.根据权利要求9所述的装置,其特征在于,所述装置进一步包括:全局缓存监控模块,用于在每个采样周期内,抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn,计算当前采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw),将p(GCw)发送给健康检测模块;

且,所述健康检测模块进一步用于,当判定所述异常等待会话占比大于预设第一阈值后,判断p(GCw)>d是否成立,若是,执行所述判断当前采样周期内该数据库节点是否存在最严重等待会话的动作,其中,d为预设第四阈值。

13.根据权利要求9所述的装置,其特征在于,所述装置进一步包括:当前块延迟BRL检测模块,用于计算BRL,将BRL发送给健康检测模块;

且,所述健康检测模块进一步用于,当判定当前采样周期内该数据库节点存在最严重等待会话后,判断BRL>e是否成立,若是,执行所述判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点的动作,其中,e为预设第五阈值。

14.根据权利要求9所述的装置,其特征在于,所述健康检测模块进一步用于,当判定该数据库节点已连续预设数目个采样周期被判定为不健康节点后,判断该数据库节点的异常等待会话是否已经自我恢复,若否,执行所述对该数据库节点执行关闭终止操作的动作;否则,不执行所述对该数据库 节点执行关闭终止操作的动作。

说明书 :

检测数据库节点健康状况的方法及装置

技术领域

[0001] 本发明涉及数据库技术领域,具体涉及检测数据库节点健康状况的方法及装置。

背景技术

[0002] Oracle真正应用集群(RAC,Real Application Cluster)概念的引入是为了提高系统的高可用性,通过集群软件加共享存储的方式实现容灾。由于各实例(instance)公用物理存储,但各自又有独立的内存结构,因此需要实时地同步分配一些资源。在某些异常情况下会引起节点性能恶劣,严重情况下导致数据库挂起(HANG)。在其中某个节点出现性能耗尽丢失响应的情况下,会导致节点间资源同步挂起,影响整个数据库的正常运行,进而导致业务系统无法提供服务。此时就需要做出迅速准确的判断,对问题节点实行紧急关闭终止(shutdown abort)操作,应用程序方面通过配置透明应用程序故障转移(TAF,Transparent Application Failover)可以实现业务无缝切换,在数据库单点故障时实现业务零中断。但目前没有相应成熟的技术解决方案,通常依赖于人工检查判断后再作进一步操作。
[0003] 目前常见检测RAC数据库节点运行状况的方法有以下几种:
[0004] 一、利用crs_stat、crsctl check crs、ps-ef、ping、sar等常规系统命令,手工逐一排查各个问题疑似点。如果某方面存在异常,则进行进一步的日志抓取分析。由于常规系统命令产生结果较为专业,可读性不强,且各种系统日志分布较为分散,导致实际操作效率较低。
[0005] 二、利用v$session_wait、v$sysstat、v$cache_transfer等系统视图,结合AWR snapshots、ADDM report来检查各种性能指标,并根据维护管理人员的个人经验进行人为判断。这种方法难以有一个相对合理的标准来作为依据以供判断,对问题的定位存在很大的不确定性。
[0006] 三、利用oracle提供的专业诊断工具,如oradebug、hanganalyze等对数据库内存段进行转储(dump),根据产生的trace文件来进行底层分析。这种方法最为低效,需要oracle专业开发人员才能分析。
[0007] 综合以上各种常规技术手段,在单节点数据库性能产生异常状况时,数据库维护管理人员只能通过简单的监控点告警捕捉、登陆系统检查、问题定位分析等流程来进行。传统意义上的解决方法时效性差,从发现问题到定位解决问题往往需要耗时30分钟以上,给客户带来很差的体验感知。且问题的判断分析与管理维护人员的个人主观能力有很大关系,无法做到标准化、专业化。显然无法满足电信级在线事务处理(OLTP,On-Line Transaction Processing)系统的大型业务请求。
[0008] 随着信息化系统发展的加快以及集群系统的大范围使用,数据库系统规模及复杂程度呈现日益增长的趋势,特别是对于电信、金融等重要行业的数据中心,其核心业务系统的交互响应实时性很高。一旦数据库系统某个节点出现异常状况,再根据传统的方法进行逐项检查,准确性和及时性都很难得到保证。
[0009] 现有的几种技术,由于其出发点均是应急处理,故其实现机理都存在一定的被动性及盲目性。数据库性能恶劣时,数据库管理员(DBA,Database Administrator)通常不是第一时间获知的,往往都是应用维护人员或是开发人员发现业务感知或是业务处理受到影响报告给DBA。此时数据库一般已经处于停止响应或者响应极度缓慢或是HANG状态,造成大面积的业务受到影响,而不能有效地快速发现性能问题,进而采取进一步的处理措施。
[0010] 因此,原有的几项技术要点只是单纯地、片面地进行一些信息搜集和简单的性能判断,对于复杂的、需要快速响应的OLTP大规模数据库系统,显然已经无法满足。除了一些特定明显的系统错误信息之外,对于其他数据库节点运行健康状况的评估,很大程度上取决于维护人员的经验判断,无法做到标准化实施。

发明内容

[0011] 本发明提供检测数据库节点健康状况的方法及装置,以实现对oracle RAC数据库节点健康状况的自动、实时检测。
[0012] 本发明的技术方案是这样实现的:
[0013] 一种检测数据库节点健康状况的方法,该方法包括:
[0014] 对于任一oracle真正应用集群RAC数据库节点,在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态,根据该活跃会话状态计算该采样周期内该数据库节点的异常等待会话占比;
[0015] 判断所述异常等待会话占比是否大于预设第一阈值,若是,判断该采样周期内该数据库节点是否存在最严重等待会话,若存在,判定该采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,对该数据库节点执行关闭终止操作。
[0016] 所述计算该采样周期内该数据库节点的异常等待会话占比包括:
[0017] 统计该采样周期内该数据库节点正常执行的活跃会话数En、空闲等待的活跃会话数Iw、异常等待的活跃会话数Wt;
[0018] 计算该采样周期内该数据库节点的 异常等待会话占比 p( Wt ):
[0019] 当所述数据库节点属于高并发在线事务处理OLTP系统时,所述第一阈值的取值为90%;
[0020] 当所述数据库节点属于数据分析决策支持系统DSS时,所述第一阈值的取值为85%。
[0021] 所述当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:
[0022] 计算该采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms):A(Ms)=Msn/第一时长,其中,Msn为该采样周期内该数据库节点当前实例的最严重等待会话数;
[0023] 判断A(Ms)>b是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,b为预设第二阈值。
[0024] 所述在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态进一步包括:抓取最近第一时长内该数据库节点的全局队列等待数GEwn;
[0025] 计算该采样周期内该数据库节点当前实例的全局队列等待占比p(GEw):p(GEw)=GEwn/GEn,其中,GEn为该采样周期内该数据库节点当前实例的全局队列总数;
[0026] 且,当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:
[0027] 判断p(GEw)>c是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,c为预设第三阈值。
[0028] 所述在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态进一步包括:抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn;
[0029] 计算该采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw):p(GCw)=GCwn/A(GC),
[0030] 其中,A(GC)为该数据库节点当前实例的全局缓存交互平均值,A(GC)=第二时长内该数据库节点当前实例的全局缓存交互量/第二时长;
[0031] 且,当判定所述异常等待会话占比大于预设第一阈值后,进一步包括:
[0032] 判断p(GCw)>d是否成立,若是,执行所述判断该采样周期内该数据库节点是否存在最严重等待会话的动作,其中,d为预设第四阈值。
[0033] 所述当判定该采样周期内该数据库节点存在最严重等待会话后,进一步包括:
[0034] 计算当前块延迟BRL,判断BRL>e是否成立,若是,执行所述判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点的动作,其中,e为预设第五阈值。
[0035] 当所述数据库为OLTP系统时,所述e的取值为5ms。
[0036] 当判定该数据库节点已连续预设数目个采样周期被判定为不健康节点后,进一步包括:
[0037] 判断该数据库节点的异常等待会话是否已经自我恢复,若否,执行所述对该数据库节点执行关闭终止操作的动作;否则,不执行所述对该数据库节点执行关闭终止操作的动作。
[0038] 一种检测数据库节点健康状况的装置,该装置包括:
[0039] 活跃会话状态检测模块:在每个采样周期内,抓取最近第一时长内本oracle RAC数据库节点的活跃会话状态,将该活跃会话状态发送给异常会话分析模块;
[0040] 异常会话分析模块:接收所述活跃会话状态,根据该活跃会话状态计算当前采样周期内该数据库节点的异常等待会话占比,将该异常等待会话占比和当前采样周期内是否存在最严重等待会话信息发送给健康检测模块;
[0041] 健康检测模块:接收所述异常等待会话占比和是否存在最严重等待会话信息,判断该异常等待会话占比是否大于预设第一阈值,若是,判断所述是否存在最严重会话信息是否指示当前采样周期内该数据库节点存在最严重等待会话,若存在,判定当前采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,对该数据库节点执行关闭终止操作。
[0042] 所述异常会话分析模块进一步用于,计算当前采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms),将A(Ms)发送给健康检测模块;
[0043] 所述健康检测模块进一步用于,在判定异常等待会话占比大于预设第一阈值后,判断所述A(Ms)>b是否成立,若是,执行所述判断当前采样周期内该数据库节点是否存在最严重等待会话的动作,其中,b为预设第二阈值。
[0044] 所述装置进一步包括:全局队列监控模块,用于在每个采样周期内,抓取最近第一时长内本oracle RAC数据库节点的的全局队列等待数GEwn,计算当前采样周期内该数据库节点当前实例的全局队列等待占比p(GEw),将p(GEw)发送给健康检测模块;
[0045] 且,所述健康检测模块进一步用于,当判定所述异常等待会话占比大于预设第一阈值后,判断p(GEw)>c是否成立,若是,执行所述判断当前采样周期内该数据库节点是否存在最严重等待会话的动作,其中,c为预设第三阈值。
[0046] 所述装置进一步包括:全局缓存监控模块,用于在每个采样周期内,抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn,计算当前采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw),将p(GCw)发送给健康检测模块;
[0047] 且,所述健康检测模块进一步用于,当判定所述异常等待会话占比大于预设第一阈值后,判断p(GCw)>d是否成立,若是,执行所述判断当前采样周期内该数据库节点是否存在最严重等待会话的动作,其中,d为预设第四阈值。
[0048] 所述装置进一步包括:BRL检测模块,用于计算BRL,将BRL发送给健康检测模块;
[0049] 且,所述健康检测模块进一步用于,当判定当前采样周期内该数据库节点存在最严重等待会话后,判断BRL>e是否成立,若是,执行所述判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点的动作,其中,e为预设第五阈值。
[0050] 所述健康检测模块进一步用于,当判定该数据库节点已连续预设数目个采样周期被判定为不健康节点后,判断该数据库节点的异常等待会话是否已经自我恢复,若否,执行所述对该数据库节点执行关闭终止操作的动作;否则,不执行所述对该数据库节点执行关闭终止操作的动作。
[0051] 与现有技术相比,本发明实现了自动实时地检测oracle RAC数据库节点健康状况,使得检测结果更加快速、有效、可靠和标准化;与单一的、瞬时的检测技术相比,引入了范围趋势分析手段,在一定程度上避免了瞬时偶发的异常检测灵敏度差的缺陷。

附图说明

[0052] 图1为本发明实施例一提供的检测oracle RAC数据库节点健康状况的方法流程图;
[0053] 图2为本发明实施例二提供的检测oracle RAC数据库节点健康状况的方法流程图;
[0054] 图3为本发明实施例提供的检测oracle RAC数据库节点健康状况的装置的组成示意图。

具体实施方式

[0055] 下面结合附图及具体实施例对本发明再作进一步详细的说明。
[0056] 图1为本发明实施例一提供的检测oracle RAC数据库节点健康状况的方法流程图,如图1所示,其具体步骤如下:
[0057] 步骤101:对于任一oracle RAC数据库节点,在每个采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态,根据该活跃会话状态计算该采样周期内该数据库节点的异常等待会话占比。
[0058] 步骤102:判断该异常等待会话占比是否大于预设第一阈值,若是,执行步骤103;否则,执行步骤106。
[0059] 步骤103:判断该采样周期内该数据库节点是否存在最严重等待会话,若是,执行步骤104;否则,执行步骤106。
[0060] 步骤104:判定该采样周期内该数据库节点为不健康节点,继续判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,执行步骤105;否则,执行步骤106。
[0061] 步骤105:对该数据库节点执行关闭终止操作,本流程结束。
[0062] 步骤106:继续进行下一次采样。
[0063] 图2为本发明实施例提供的检测oracle RAC数据库节点健康状况的方法流程图,如图2所示,其具体步骤如下:
[0064] 步骤200:预设采样周期T1和第一时长T2。
[0065] 步骤201:对于任一oracle RAC数据库节点,当一个采样周期到来时,在当前采样周期内,抓取最近第一时长内该数据库节点的活跃会话状态,抓取最近第一时长内该数据库节点的全局队列等待数GEwn,抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn。
[0066] 步骤202:分别统计并记录当前采样周期内该数据库节点正常执行的活跃会话数En、空闲等待的活跃会话数Iw、异常等待的活跃会话数Wt。
[0067] 会话等待例如:等待中央处理单元(CPU,Central Processing Unit)、等待输入/输出(I/O,Input/Output)、等待锁、空闲等待等。其中,空闲等待不会对系统性能造成不良影响,而等待CPU、等待I/O、等待锁则会对系统性能造成不良影响,属于异常等待。根据对系统性能造成不良影响的程序,可预先将异常等待分为一般应用程序性等待、严重等待、最严重等待等,例如:等待CPU、等待I/O属于一般应用程序性等待,等待锁则属于严重等待。
[0068] 步骤203:计算当前采样周期内该数据库节点的异常等待会话占比p(Wt)。
[0069]
[0070] 步骤204:计算当前采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms)。
[0071] 将异常等待会话中对系统性能造成最严重不良影响的会话称为最严重等待会话。A(Ms)=Msn/T2,其中,Msn为当前采样周期内该数据库节点当前实例的最严重等待的会话数。
[0072] 步骤205:计算当前采样周期内该数据库节点当前实例的全局队列等待占比p(GEw)。
[0073] p(GEw)=GEwn/GEn,其中,GEn为当前采样周期内该数据库节点当前实例的全局队列总数。
[0074] 步骤206:计算当前采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw)。
[0075] p(GCw)=GCwn/A(GC)。
[0076] 其中,A(GC)为该数据库节点当前实例的全局缓存交互平均值,A(GC)=第二时长内该数据库节点当前实例的全局缓存交互量/第二时长。第二时长为选定的一段时间,以该段时间内该数据库节点当前实例的全局缓存交互平均值作为基准值。
[0077] 步骤207:判断p(Wt)>a是否成立,若是,执行步骤208;否则,继续进行下一次采样,返回步骤201。
[0078] 其中,若当前oracle RAC数据库为高并发OLTP系统,则a的取值通常为90%;若当前oracle RAC数据库为数据分析决策支持系统(DSS,Decision Support System),则a的取值通常为85%。
[0079] 步骤208:判断A(Ms)>b是否成立,若是,执行步骤209;否则,继续进行下一次采样,返回步骤201。
[0080] b的取值可根据经验或预先统计确定。
[0081] 步骤209:判断p(GEw)>c、p(GCw)>d是否同时成立,若是,执行步骤210;否则,继续进行下一次采样,返回步骤201。
[0082] c、d的取值可根据经验或预先统计确定
[0083] 步骤210:判断当前采样周期内该数据库节点是否存在最严重等待会话,若是,执行步骤211;否则,继续进行下一次采样,返回步骤201。
[0084] 步骤211:计算当前块延迟(BRL,Block Request Latency),判断BRL>e是否成立,若是,执行步骤212;否则,继续进行下一次采样,返回步骤201。
[0085] BRL=(全局缓存当前块接收时长/全局缓存当前块接收数)-(全局缓存当前块等待时长+全局缓存当前块刷新时长+全局缓存当前块发送时长)/全局缓存当前块完整接收到数)
[0086] e可根据经验确定。
[0087] 对于正常OLTP系统,BRL一般都在5ms以下。因此,对于OLTP系统,e可取5ms。
[0088] 步骤212:判定当前采样周期内该数据库节点为不健康节点。
[0089] 步骤213:判断该数据库节点是否已连续m个采样周期被判定为不健康节点,若是,执行步骤214;否则,继续进行下一次采样,返回步骤201。
[0090] m为预设正整数。
[0091] 步骤214:判断该数据库节点的异常等待会话是否已经自我恢复,若否,执行步骤215;否则,继续进行下一次采样,返回步骤201。
[0092] 步骤215:确定该数据库节点性能恶劣,对该数据库节点执行shut down abort操作。
[0093] 图3为本发明实施例提供的检测数据库节点健康状况的装置的组成示意图,如图3所示,其主要包括:活跃会话状态检测模块31、异常会话分析模块32、全局队列监控模块33、全局缓存监控模块34、BRL检测模块35和健康检测模块36,其中:
[0094] 活跃会话状态检测模块31:在每个采样周期内,抓取最近第一时长内本oracle RAC数据库节点的活跃会话状态,将该活跃会话状态发送给异常会话分析模块32。
[0095] 异常会话分析模块32:接收活跃会话状态检测模块31发来的当前采样周期内的活跃会话状态,根据该活跃会话状态计算当前采样周期内该数据库节点的异常等待会话占比p(Wt),计算当前采样周期内该数据库节点当前实例的最严重等待会话的每秒平均数A(Ms),将p(Wt)、当前采样周期内是否存在最严重等待会话信息和A(Ms)发送给健康检测模块36。
[0096] 全局队列监控模块33:在每个采样周期内,抓取最近第一时长内本oracle RAC数据库节点的的全局队列等待数GEwn,计算当前采样周期内该数据库节点当前实例的全局队列等待占比p(GEw),将p(GEw)发送给健康检测模块36。
[0097] 全局缓存监控模块34:在每个采样周期内,抓取最近第一时长内该数据库节点的全局缓存交互等待量GCwn,计算当前采样周期内该数据库节点当前实例的全局缓存交互等待占比p(GCw),将p(GCw)发送给健康检测模块36。
[0098] BRL检测模块35:用于计算BRL,将BRL发送给健康检测模块36。
[0099] 健康检测模块36:接收异常分析模块32发来的当前采样周期内的p(Wt)、是否存在最严重等待会话信息和A(Ms),接收全局队列监控模块33发来的当前采样周期内的p(GEw),接收全局缓存监控模块34发来的当前采样周期内的p(GCw),接收BRL检测模块35发来的BRL,判断p(Wt)>a是否成立,若是,判断A(Ms)>b是否成立,若是,判断p(GEw)>c和p(GCw)>d是否同时成立,若是,判断当前采样周期内该数据库节点是否存在最严重等待会话,若是,判断BRL>e是否成立,若是,判定当前采样周期内该数据库节点为不健康节点,判断该数据库节点是否已连续预设数目个采样周期被判定为不健康节点,若是,判断该数据库节点的异常等待会话是否已经自我恢复,若否,对该数据库节点执行关闭终止操作的动作;否则,继续进行下一次采样。
[0100] 本发明实施例中,可以将各个采样周期内抓取到的数据例如:活跃会话状态、全局队列等待数、全局队列数、全局缓存交互等待量、全局缓存交互量等存储为XML文件,以避免数据库出现问题时,这些数据会丢失。
[0101] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。