VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

支持RAS:对于SIGBUS信号的处理

术语定义

SIGBUS信号:

  • 硬件故障导致SIGBUS信号。

  • Linux平台上运行malloc(),没有足够的RAM会给当前进程发送SIGBUS信号(实测未复现,不同系统可能会不一样)。

  • 部分架构上访问数据时有对齐的要求,例如只能从4字节边界上读取一个4字节的数据类型,否则向当前进程发送SIGBUS信号。

  • 试图访问一块无文件内容相应的内存区域,比如超过文件尾的内存区域,或者以前有文件内容对应,现在为另一进程截断过的内存区域,产生SIGBUS信号。

SIGBUS信号处理,可以在数据库接受到SIGBUS信号后进行一些处理并将结果记录到日志后再中止数据库运行。

SIGBUS信号记录操作,如果因SIGBUS停库则进行记录SIGBUS信号信息到文件,数据库工具可以查询是否存在SIGBUS错误,当SIGBUS错误修复后需手动清除SIGBUS信号记录文件。

功能描述

结合数据库的运行信息处理SIGBUS返回值,将处理结果记录到日志后再中止数据库运行。接收到SIGBUS信号后,SIGBUS信号中signal code值如下:

si_code 原因
BUS_ADRALN 无效的地址对齐。
BUS_ADRERR 不存在的物理地址。
BUS_OBJERR 特定对象硬件错误 。
BUS_MCEERR_AR 硬件内存错误导致机器进行检查(hardware memory error consumed on a machine check: action required)。
BUS_MCEERR_AO 在进程中检测到硬件内存错误(hardware memory error detected in process but not consumed: action optional)。

注意事项

SIGBUS信号处理依赖GUC参数enable_incremental_checkpoint,请确保该参数处于开启状态(默认开启)。