【问题分类】

性能优化、数据库运维

【关键词】

YashanDB、yac、shutdown immediate、hang死、SHM_POOL_SIZE

一、问题描述

客户反馈在修改了YashanDB的共享集群(yac)相关参数后,执行数据库关闭操作(shutdown immediate)时,出现了长时间的hang死现象,数据库无法正常关闭。

二、原因分析

经过详细排查,发现shutdown过程中出现以下情况:

shutdown操作执行过程中,内部线程卡在了获取信号量gInstance->trigger->sema这一环节;

正常情况下,该信号量由数据库主线程(main线程)在执行shutdownWait()方法时释放;

但本次卡住的根本原因在于主线程执行SERVER_CMD_SHUTDOWN命令时,调用了jobManagerStop();

而jobManagerStop()又受阻于doUpdateSysJob线程调用的checkRedoFreeSpace()接口;

最终导致了内部线程等待资源释放,形成死循环;

核心原因是:SHM_POOL_SIZE参数设置过小,共享内存不足,影响了archProc模块的日志文件创建,进而影响了redo日志空间使用。

简单来说,就是因为配置的共享内存(SHM_POOL_SIZE)过小,导致shutdown时无法正常释放资源,造成数据库hang死。

三、如何解决?

方法一:调整共享内存参数 在配置文件中增加SHM_POOL_SIZE的值,具体大小可根据实际环境与业务负载确定,确保内存充足:

SHM_POOL_SIZE = (合理值,建议大于当前值)
方法二:检查并优化其他关联参数 除了SHM_POOL_SIZE外,建议同时检查与内存和日志管理相关的其他参数设置,确保整体资源分配合理、充足。

四、影响范围

该问题已确认影响的YashanDB版本范围:23.1 ~ 23.1.1.200

目前官方未明确修复版本,建议用户在上述版本范围内谨慎调整SHM_POOL_SIZE参数,以避免再次出现类似问题。

五、日常运维经验总结

调整YashanDB参数,尤其是共享集群(yac)参数时,应谨慎评估资源影响;

建议定期监控共享内存、日志空间使用情况,预先发现资源不足风险;

遇到shutdown或启动hang住现象时,可优先检查内存、磁盘空间、日志文件使用等资源情况。


数据库砖家
1 声望0 粉丝