近期有用户在麒麟(Kylin V10 SP1)环境部署 YashanDB 后发现:虽然数据库运行一切正常,但巡检时却在 run.log 中看到大量 metadata changed 错误信息,引发关注。

image.png
一、问题现象

数据库运行无异常;

但在日志文件中出现了大量类似如下报错:

metadata changed
二、影响版本

YashanDB 版本:22.2.11.100

操作系统:麒麟 Kylin V10 SP1

三、风险与影响评估
image.png

四、问题根因解析

该问题与 YashanDB 的文件监控机制有关:

监控机制说明

YashanDB 使用 Linux 内核的 inotify_add_watch() 接口监控以下文件状态:

数据文件

redo 日志文件

控制文件

归档日志文件

触发条件包括权限变化、时间戳变化、属性变更等,依赖于内核返回的事件类型。

麒麟系统下行为差异

在麒麟系统上,inotify_add_watch() 会频繁返回 IN_ATTRIB 事件(即文件属性变更),即便文件本身没有发生明显改动。这可能由以下情况引发:

1.系统级隐式属性刷新:如修改时间、访问时间变化;

2.后台软件或服务干预:如杀毒、备份、权限工具等;

3.文件系统缓存或挂载策略不同;

4.并发访问引发元数据更新;

5.麒麟内核兼容差异,与 CentOS 等常见发行版不一致。

这些行为会被 YashanDB 误认为是“异常变化”,记录大量“metadata changed”日志。

五、官方处理方式

在 YashanDB 22.2.13.100 版本之后,系统新增了“防洪机制”:

image.png
针对频繁的属性变更事件做了日志抑制处理;

避免日志刷屏,保留关键异常记录,提升可读性;

不会影响监控准确性或数据可靠性。

六、处理建议

建议一:确认无实际文件异常后,可

可检查以下路径文件是否有实际异常:

$YASDB_DATA/data
$YASDB_DATA/redo
$YASDB_DATA/control
$YASDB_DATA/arch
确认没有损坏或异常修改,即可放心运行。

建议二:建议升级至 ≥22.2.13.100 版本

升级后自动启用“日志抑制”策略,可彻底避免日志异常刷屏:

升级操作参考官方文档

yasboot cluster upgrade ...
七、经验总结

image.png


数据库砖家
1 声望0 粉丝