【YashanDB 数据库】数据库运行正常,日志出现大量错误 metadata changed
问题现象
客户在麒麟 kylin v10 sp1 环境上部署 YashanDB,运行正常, 但是在巡检中发现 run.log 中有大量错误日志文件 metadata changed,需要排查原因
问题单:前置机大量错误日志文件 metadata changed,需要排查原因
问题的风险及影响
客户环境为准生产环境,担心影响业务执行。
问题影响的版本
YashanDB 版本:22.2.11.100
问题发生原因
YashanDB 利用操作系统 linotify 相关接口做文件设备的监控,范围是:数据文件、redo 文件、控制文件、归档日志。
inotify_add_watch() 函数在部分麒麟(kylin v10 sp1)环境上执行结果和 CentOS 等其他环境不一致,在文件正常的情况下会返回大量的属性变更事件,导致大量错误日志,新版本(22.2.13.100 之后)做了防洪规避,避免日志过多掩盖其他信息。
解决方法及规避方式
1、检查相应文件是否有异常。
2、升级到 22.2.13.100 之后版本。
问题分析和处理过程
检查参数 DIAG_ADR_ENABLED,值为 TRUE
该参数开启会启动 HEATH_MONITOR 线程, 做健康检查:
分析日志产生的原因
inotify_add_watch() 是 Linux 系统编程中用于监控文件系统事件的一个系统调用函数,它属于 inotify(Input/Output Notifier)接口的一部分。inotify 是 Linux 内核提供的一种高效、实时的文件系统事件监控机制,允许用户空间程序监控文件或目录的各种变化,如文件创建、删除、修改、移动等。
使用 inotify_add_watch() 监视某个文件或目录,并接收到属性变更(IN_ATTRIB)事件,但查看文件权限时并未发现明显的变化,可能有以下几种情况:
1、隐式属性变更:除了明显的权限(如读、写、执行)变更外,文件属性还包括其他一些可能被修改的元数据,如文件的拥有者、所属组、修改时间、访问时间、扩展属性(xattrs)等。这些属性的变更也可能触发 IN_ATTRIB 事件。请检查这些元数据是否发生了变化。
2、文件系统内部操作:有时,文件系统或底层存储设备可能会进行内部维护操作,如元数据刷新、缓存同步等,这些操作可能导致文件属性看似未变但实际上发生了内部变更,从而触发 IN_ATTRIB 事件。这种情况通常难以从用户层面察觉,但确实会导致事件通知。
3、文件系统挂载选项:如果文件系统是以特定挂载选项挂载的,某些属性变更可能不会立即反映到用户空间。例如,某些网络文件系统(如 NFS)或加密文件系统可能具有缓存属性或延迟写入特性。在这种情况下,虽然内核已经感知到属性变更并触发了 IN_ATTRIB 事件,但在用户空间观察时可能尚未看到变化。您可以尝试刷新文件系统缓存(如使用 sync 或 fsync),或者等待一段时间看属性是否会最终更新。
4、软件或服务干预:某些软件或服务(如备份工具、文件同步服务、权限管理工具等)可能在后台默默地修改文件属性,导致 IN_ATTRIB 事件的发生。检查是否有此类软件或服务正在运行,并确认它们是否可能影响到您监视的文件或目录。
5、编程错误或工具误报:如果您使用的是自编写的代码或第三方工具来检查文件权限,可能存在编程错误或工具本身的误报问题。请确保检查代码逻辑的正确性,或者使用可靠的命令行工具(如 ls -l 或 stat)来验证权限是否确实未变。
6、并发修改:如果多个进程或线程同时对文件进行操作,可能导致属性变更事件与您观察到的权限状态之间存在时间差。确保在接收到事件通知后立即检查权限,以减少并发修改带来的影响。
如果文件属性发生变化, 会触发 IN_ATTRIB 事件,输出错误日志
inotify_add_watch() 函数在部分麒麟(kylin v10 sp1)环境上执行结果和 CentOS 等其他环境不一致,在文件正常的情况下会返回大量的属性变更事件,导致大量错误日志。
检查数据库正常,该错误信息可忽略
客户确认数据库运行正常,inotify_add_watch 是内核函数,其返回结果和其他系统不一致,新版本做了防洪规避,避免日志过多掩盖其他信息,可升级到新版本。
经验总结
1、YashanDB 利用操作系统 linotify 相关接口做文件设备的监控,范围是:数据文件、redo 文件、控制文件、归档日志。
2、inotify_add_watch() 函数在部分麒麟(kylin v10 sp1)环境上执行结果和 CentOS 等其他环境不一致,在文件正常的情况下会返回大量的属性变更事件,导致大量错误日志,新版本(22.2.13.100 之后)做了防洪规避,避免日志过多掩盖其他信息。
评论