YashanDB|修改 yac 参数后执行 shutdown immediate 数据库卡住的原因和解决办法
【问题分类】
性能优化、数据库运维
【关键词】
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 外,建议同时检查与内存和日志管理相关的其他参数设置,确保整体资源分配合理、充足。
四、影响范围
该问题已确认影响的 YashanDB 版本范围:23.1 ~ 23.1.1.200
目前官方未明确修复版本,建议用户在上述版本范围内谨慎调整 SHM_POOL_SIZE 参数,以避免再次出现类似问题。
五、日常运维经验总结
调整 YashanDB 参数,尤其是共享集群(yac)参数时,应谨慎评估资源影响;
建议定期监控共享内存、日志空间使用情况,预先发现资源不足风险;
遇到 shutdown 或启动 hang 住现象时,可优先检查内存、磁盘空间、日志文件使用等资源情况。
评论