故障、问题和事件
为便于诊断和解决问题,YashanDB引入了三个概念:故障、问题和事件。
故障
故障是YashanDB运行过程中可能出现的一些严重错误,由数据库内部定义。可以通过视图V$DIAG_FAULT查看相关故障的信息。
问题
问题是数据库运行过程中真实发生的故障,相同的故障可能会记录多个问题,相同故障的问题是通过问题键值进行区分的。可以通过视图V$DIAG_PROBLEM查看数据库运行过程中出现的问题。
事件
事件是单次出现的问题,数据库运行过程中,不同的会话在不同的时间可能产生相同的问题,数据库会创建多个事件,每个事件都有唯一标识的ID用于区分,也会记录当前会话的ID。可以通过视图V$DIAG_INCIDENT查看数据库运行过程中出现的严重错误,和获取更多的诊断数据,例如创建时间、会话ID、故障详细描述等。
-- 该视图里定义当前YashanDB的所有故障信息
SELECT TYPE,code,description FROM V$DIAG_FAULT;
TYPE CODE DESCRIPTION
--------- ------------ ----------------------------------------------------------------
YASF 101 cannot allocate memory
YASF 102 too many open files
YASF 103 no space left on device
YASF 104 failed to open file
YASF 105 failed to create file
YASF 106 failed to write file
YASF 107 file metadata changed, for example, permissions, timestamps, extended attributes, and user/group ID, etc
YASF 108 file is missing
YASF 109 file is moved
YASF 110 file system is unmounted
YASF 111 failed to read file
YASF 112 failed to extend file
YASF 201 the data file is corrupted
YASF 202 the redo log file is corrupted
YASF 203 the ctrl files are corrupted
YASF 204 data block versions are mismatching
YASF 205 the database is aborted
YASF 206 the database needs to be repaired
YASF 207 deadlock detected
YASF 208 inconsistent database startup
YASF 209 watcher has an exception
YASF 210 the user limit on the total number of watches was reached
YASF 211 synchronization standby database destinations have failed
当问题(严重错误)多次发生时,系统将为每次问题创建一个事件。 这些事件将在加上时间戳后,存储在自动诊断存储库中。每个事件都由事件ID标识,该ID在自动诊断存储库中是唯一的。
发生一个事件时,数据库将执行如下操作:
收集首次失败的诊断数据。
使用事件ID标记事件。
将事件dump到为该事件创建的自动诊断存储库子目录中。
事件防洪
一个问题可能会在短时间内产生数十个或数百个事件,这将导致系统中生成过多的诊断数据,占用 自动诊断存储库中的太多空间,并可能减慢诊断和解决问题的速度。由于这些原因,故障诊断机制将在达到洪水阈值后控制事件的生成。
受到洪水控制的事件只记录告警日志,不再dump事件。洪水控制事件提供了一种通知用户正在发生严重错误的方法,但不会存在诊断数据过载的现象。
事件洪水控制的阈值水平是预先确定的,无法更改。它们定义如下:
在一小时内同一问题发生5个事件后,此问题的后续事件将受到洪水控制。该问题的事件的正常(非洪水控制)记录将在下一个小时再次开始。
在一天内同一问题发生25个事件后,此问题的后续事件将受到洪水控制。该问题的事件的正常记录将在第二天再次开始。
在一小时内发生同一问题的50个事件,或者在一天内发生同一问题的250个事件后,此问题的后续事件永远不再记录到自动诊断存储库中。该情况下,数据库将向告警日志中写入一条消息,指示不会再记录其他事件。
Note: 事件洪水控制后不会再记录事件,但是会记录事件的防洪累计次数。 作为DBA,应时常排查是否有新的事件产生,及时定位解决问题。 事件和问题诊断数据的存储上限为1000000条,如果个数超过该上限,新的诊断数据会覆盖旧的诊断数据。
自动捕获诊断数据——“黑匣子”
YashanDB提供一种机制,在数据库进程出现故障宕机前,收集进程运行堆栈等信息,将诊断数据dump到自动诊断存储库中,这种主动诊断数据类似于飞机“黑匣子”飞行记录仪收集的数据。
Note: 当收集到 “黑匣子” 诊断数据,请打包诊断数据并及时联系我们的技术支持。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。