YashanDB 故障诊断概念
故障、问题和事件
为便于诊断和解决问题,YashanDB 引入了三个概念:故障、问题和事件。
故障
故障是 YashanDB 运行过程中可能出现的一些严重错误,由数据库内部定义。可以通过视图 V$DIAG_FAULT 查看相关故障的信息。
问题
问题是数据库运行过程中真实发生的故障,相同的故障可能会记录多个问题,相同故障的问题是通过问题键值进行区分的。可以通过视图 V$DIAG_PROBLEM 查看数据库运行过程中出现的问题。
事件
事件是单次出现的问题,数据库运行过程中,不同的会话在不同的时间可能产生相同的问题,数据库会创建多个事件,每个事件都有唯一标识的 ID 用于区分,也会记录当前会话的 ID。可以通过视图 V$DIAG_INCIDENT 查看数据库运行过程中出现的严重错误,和获取更多的诊断数据,例如创建时间、会话 ID、故障详细描述等。
当问题(严重错误)多次发生时,系统将为每次问题创建一个事件。 这些事件将在加上时间戳后,存储在自动诊断存储库中。每个事件都由事件 ID 标识,该 ID 在自动诊断存储库中是唯一的。
发生一个事件时,数据库将执行如下操作:
收集首次失败的诊断数据。
使用事件 ID 标记事件。
将事件 dump 到为该事件创建的自动诊断存储库子目录中。
事件防洪
一个问题可能会在短时间内产生数十个或数百个事件,这将导致系统中生成过多的诊断数据,占用 自动诊断存储库中的太多空间,并可能减慢诊断和解决问题的速度。由于这些原因,故障诊断机制将在达到洪水阈值后控制事件的生成。
受到洪水控制的事件只记录告警日志,不再 dump 事件。洪水控制事件提供了一种通知用户正在发生严重错误的方法,但不会存在诊断数据过载的现象。
事件洪水控制的阈值水平是预先确定的,无法更改。它们定义如下:
在一小时内同一问题发生 5 个事件后,此问题的后续事件将受到洪水控制。该问题的事件的正常(非洪水控制)记录将在下一个小时再次开始。
在一天内同一问题发生 25 个事件后,此问题的后续事件将受到洪水控制。该问题的事件的正常记录将在第二天再次开始。
在一小时内发生同一问题的 50 个事件,或者在一天内发生同一问题的 250 个事件后,此问题的后续事件永远不再记录到自动诊断存储库中。该情况下,数据库将向告警日志中写入一条消息,指示不会再记录其他事件。
Note: 事件洪水控制后不会再记录事件,但是会记录事件的防洪累计次数。 作为 DBA,应时常排查是否有新的事件产生,及时定位解决问题。 事件和问题诊断数据的存储上限为 1000000 条,如果个数超过该上限,新的诊断数据会覆盖旧的诊断数据。
自动捕获诊断数据——“黑匣子”
YashanDB 提供一种机制,在数据库进程出现故障宕机前,收集进程运行堆栈等信息,将诊断数据 dump 到自动诊断存储库中,这种主动诊断数据类似于飞机“黑匣子”飞行记录仪收集的数据。
Note: 当收集到 “黑匣子” 诊断数据,请打包诊断数据并及时联系我们的技术支持。
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/ae9f9a5c8327a3716361c22b0】。文章转载请联系作者。
评论