写点什么

YashanDB 知识库|使用 EXP 导出全库导致服务器卡死? 可能是这个原因!

作者:数据库砖家
  • 2025-04-21
    广东
  • 本文字数:1015 字

    阅读完需:约 3 分钟

【问题分类】

数据库导出异常、资源管理问题

【关键词】

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 空间

swapoff -dd if=/dev/zero of=/swap bs=1M count=30720mkswap /swapchmod 600 /swapswapon /swapsysctl -w vm.swappiness=60
复制代码

# 永久配置 swap 空间

vi /etc/fstab

添加如下内容:

/swap swap swap defaults 0 0
复制代码

方案 2:降低数据库内存配置

-- 推荐:将 DATA_BUFFER_SIZE 调整到总内存的 60%以下

alter system set DATA_BUFFER_SIZE=xxx SCOPE=SPFILE;
复制代码

附:配置 core 文件生成(用于异常排查)

echo "ulimit -c unlimited" >> /etc/profilesource /etc/profilemkdir -p /data/corefilechmod 777 /data/corefile/echo "/data/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_patternecho "kernel.core_pattern=/data/corefile/core-%e-%p-%t" >> /etc/sysctl.confsysctl -p /etc/sysctl.conf
复制代码

五、经验总结

数据库实例内存(尤其是 DATA_BUFFER_SIZE)建议设置在服务器总内存的 60%左右;

data buffer 建议占数据库实例内存的 80%;

若数据库进程消失但无 core 文件生成,通常为系统内存不足自动 kill 的结果,可通过查看/var/log/message 来验证。

用户头像

还未添加个人签名 2025-04-09 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB知识库|使用EXP导出全库导致服务器卡死?可能是这个原因!_数据库·_数据库砖家_InfoQ写作社区