更新时间:2022-08-05 GMT+08:00
MongoDB数据库迁移过程中,源数据库出现内存溢出(OOM)是什么原因
场景描述
在进行MongoDB数据库迁移的过程中,出现源数据库内存溢出(OOM),导致源数据库不可用,迁移失败。
问题分析
出现上述内存溢出可能存在如下原因:
- 源数据库的mongod服务单独部署在一台机器上,如果这种情况下在迁移过程中出现内存溢出,一般就是因为在迁移过程中源库在执行会大量消耗内存的操作,比如:创建索引,排序查询等。
- 源数据库的mongod服务和其他服务同时部署在一台机器上,而且没有设置cacheSizeGB的大小,这种情况下,如果因为其他服务消耗掉内存导致不能给wiredTiger引擎保证的内存,则会出现内存溢出的情况。
一般默认情况下,mongod的wiredTiger引擎可以使用整个机器内存减一的50%(3.2的版本)或者60%(3.4以后的版本)。
解决方案
- 如果mongod服务是单独部署在一台机器上,则在迁移过程中最好不要执行会大量消耗内存的操作,比如:创建索引,排序查询等。
- 如果mongod服务和其他服务共同部署在一台机器上,则建议给mongod的wiredTiger引擎加上cacheSizeGB的参数,设置的值为机器最小空闲内存的一半,保证所有服务在高峰期所使用的内存不会超过分配给wiredTiger引擎的内存。
父主题: 实时迁移
实时迁移 所有常见问题
- 如何判断数据迁移任务可以停止
- MySQL迁移中Definer强制转化后如何维持原业务用户权限体系
- MySQL存储过程迁移上云后遇到调用权限的问题,如何解决
- 如何确保业务数据库的全部业务已经停止
- 迁移日志提示can not get agency token
- Oracle到MySQL迁移时,索引超长如何处理
- Oracle等异构数据库迁移到MySQL后的数据库排序规则为什么是utf8mb4_bin
- RDS for MySQL不支持MyISAM引擎表,迁移时MyISAM如何处理
- 低版本迁移至MySQL 8.0,应该注意哪些问题
- MongoDB数据库迁移过程中,源数据库出现内存溢出(OOM)是什么原因
- 如何关闭集合均衡器Balancer
- 如何批量导出、导入事件(event)和触发器(trigger)
- 源库参数lower_case_table_names=1时,为什么不允许迁移包含大写字母的库或者表
- 分片集群MongoDB迁移前清除孤儿文档
- MySQL账号迁移后权限显示多了反斜杠“\”
more