YashanDB 知识库|使用 EXP 导出全库导致服务器卡死? 可能是这个原因!
【问题分类】
数据库导出异常、资源管理问题
【关键词】
EXP、服务器卡死、OOM、DATA_BUFFER_SIZE、swap 空间、内存管理
一、问题现象
某客户环境中使用 YashanDB 执行全库导出时(exp sys/Cod-2022 file=bim20240402.dmp full=y),发生以下问题:
DMP 导出文件达到约 30G 时,服务器突然卡死;
SSH 远程连接完全中断;
等待 1~2 小时后,才能重新连接;
主节点出现异常后,集群自动切换到备用节点。
二、问题分析过程
初步怀疑磁盘问题:
因为客户使用的是 NFS 网络磁盘,最初怀疑可能是网络或磁盘性能问题导致。但在更换本地磁盘测试后,问题依旧复现,排除 NFS 问题。
怀疑版本兼容问题:
数据库数据此前从 22.2.7.2 版本使用 exp 导出,imp 导入到 23.1 版本后发生的问题。然而本地同版本测试环境无法复现,GDB 调试、堆栈(pstack)分析均未发现异常,且未生成 core 文件。
检查系统日志:
查看服务器 /var/log/message 日志,发现数据库进程 yasdb 被系统 kill 掉,进一步分析发现与 OOM(内存溢出)有关。


三、根本原因定位
通过深入分析后发现:
使用 exp 全量导出时,大量数据被加载到数据库缓存(data buffer);
导致数据库实际使用的内存超过了操作系统允许的阈值;
最终触发系统 OOM(Out Of Memory)机制,将占用内存最多的数据库进程 yasdb 杀掉,从而导致服务器卡死现象。
四、问题解决及规避方法
经过多组环境测试验证,给出以下规避建议(任选一种或两种结合使用):
方案 1:开启 swap 空间
# 永久配置 swap 空间
vi /etc/fstab
添加如下内容:
方案 2:降低数据库内存配置
-- 推荐:将 DATA_BUFFER_SIZE 调整到总内存的 60%以下
附:配置 core 文件生成(用于异常排查)
五、经验总结
数据库实例内存(尤其是 DATA_BUFFER_SIZE)建议设置在服务器总内存的 60%左右;
data buffer 建议占数据库实例内存的 80%;
若数据库进程消失但无 core 文件生成,通常为系统内存不足自动 kill 的结果,可通过查看/var/log/message 来验证。
评论