mongodb导入数据变得很慢,解决办法

学习mongodb过程中遇到了一个棘手的问题,向mongos中导入大约1G的数据,变得越来越慢,甚至进度条一直不走了(之前也插入过1G数据,没遇到这种情况)。自己摸索了好久,终于解决。解决方法,与大家分享

一直停着不动
开始我以为是不是数据处理的时候出了问题,然后我又将需要导入的数据重新预处理,之后操作,还是不行,也是上述情况。
之后我又以为是mongodb集群崩了,重新搭建复制集+分片,再导入数据,还是上述问题。
那既然不是mongodb的问题,数据的问题,那就是linux的问题了。

查看了mongos.log(哈哈,后来才想到查看日志)

[ShardRegistry] Ending idle connection to host 192.168.xxx.xxx:21000 because the pool meets constraints; 1 connections to that host remain open

Google一下,大概是和什么“ 连接数 ” 有关

查看了一下mongos.conf,是有一个这么玩意,但是我设置了呀

#设置最大连接数
maxConns=20000

再连接mongos,查看最大连接数

mongos> db.serverStatus().connections		//查询最大连接数
{ "current" : 1, "available" : 818, "totalCreated" : NumberLong(1) 

有问题 ,当前mongodb最大连接数=current数值+available数值,这才819,与我设置的20000,相差甚远。后来晚上搜索一番,其实是于Linux默认进程能打开最大文件数有关

修改
第一步 编辑 /etc/security/limits.conf ,加入以下两行

* soft nofile 65535      //应该大于上述最大连接数20000就可以
* hard nofile 65535

这里 * 表示所有用户, 但有的linux系统不认, 需要具体的用户名, 比如:

root soft nofile 65535
root hard nofile 65535

第二步 编辑 etc/pam.d/login , 确保有如下行:

session required pam_limits.so

第三步 修改系统总限制
修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560

最后我重启使配置生效

再次连接mongos

mongos> db.serverStatus().connections
{ "current" : 1, "available" : 19999, "totalCreated" : 3, "active" : 1 }
//最大连接数正好两万

后来又执行mongoimport导入数据,顺利导入,还挺快
导入1G数据大约耗时十多分钟
这是我的解决方法,大家可以参考一下

本文转载于:https://blog.csdn.net/qq_40724463/article/details/92381684

原文地址:https://www.cnblogs.com/drunkPullBreeze/p/13739169.html