ctp*_*ctp 5 performance replication sharding mongodb
我对这种情况感到困惑,并试图解决这个问题几天了.我在三个3成员副本集(rs0,rs1和rs2)之上运行了3个碎片.到目前为止一切正常.数据分布在3个分片上,并克隆在副本集中.
但是:将数据导入到其中一个副本集中可以正常使用40k docs/s但是通过启用分片可以将整个过程减慢到仅1.5k docs/s.
我通过不同的方法填充数据:
所有这些都只有1.5k doc/s,令人失望.mongod是物理Xeon盒子,每个32GB,3个配置服务器是虚拟服务器(40 GB HDD,2 GB RAM,如果这很重要),mongos在我的app服务器上运行.顺便说一下,1.5k insert/s的值不依赖于分片键,专用分片键(单字段键和复合键)的相同行为以及_id字段上的散列分片键.
我尝试了很多,甚至重新安装了整个集群两次.问题是:此设置的瓶颈是什么:
让我们先计算一下:您的文档有多大?请记住,根据您的写入问题,它们必须通过网络多次传输。
您可能会因为必须建立索引而遇到这种情况。
请尝试这个:
_id无论如何,这是将数据导入共享集群的建议方法,并且应该会大大加快导入速度。一些(谨慎的!)摆弄storage.syncPeriodSecs和storage.journal.commitIntervalMs也可能有帮助。
即使将数据存储在主分片上,也可能会发生延迟。根据索引的大小,它们可能会大大减慢批量操作的速度。您可能还想查看replication.secondaryIndexPrefetch配置选项。
另一件事可能是你的 oplog 被填充的速度比复制发生的速度快。这里的问题是:一旦创建,您就无法增加它的大小。我不确定在独立模式下删除并重新创建它然后重新共享副本集是否安全,但我对此表示怀疑。因此,安全的选择是让实例实际离开副本集,使用更合适的 oplog 大小重新安装它,并将实例添加到副本集,就像第一次一样。如果您不关心数据,只需关闭副本集,调整配置文件中的oplog大小,删除数据目录并重新启动并重新初始化副本集即可。两次思考你的问题,这对我来说听起来是最好的选择,因为 opllog 不涉及独立模式,iirc。
如果您仍然遇到相同的性能问题,我的赌注是磁盘或网络 IO 问题。
您有一个相当标准的设置,您的mongos实例运行在与您不同的机器上mongod(无论是独立的还是副本集的主实例)。您可能需要检查一些事项:
mongos。我无法计算安装 nscd 提高各种操作性能的次数。mongos。假设您的 AppServer 和集群之间有防火墙,您可能需要与相应的管理员联系。mongod实例上的随机磁盘 IO| 归档时间: |
|
| 查看次数: |
5637 次 |
| 最近记录: |