在一个辅助节点上完全同步后,oplog 大小过大,导致性能问题 - MongoDB

在一个辅助节点上完全同步后,oplog 大小过大,导致性能问题 - MongoDB

我是 MongoDB 新手。我在 CentOS 6 和 Mongo 2.6.8 上有一个包含 3 个成员(1 个主成员和 2 个从成员)的副本集。

其中一个辅助服务器由于内存消耗过高而崩溃,我无法正确重新启动它(由于某些数据损坏),因此我删除了数据目录的全部内容以强制进行完全重新同步。

4 小时后,辅助节点已同步并返回到副本集。但是,它生成了 25 个“本地”文件 (local.0 ... local.24),而以前只有 2 个(和其他成员一样),仅这些文件就占用了超过 60 GB 的磁盘空间。

此外,oplog的大小也发生了变化(以前是990MB,现在是47GB):

rs:SECONDARY> rs.printReplicationInfo(); 配置的 oplog 大小:47774.441162109375MB 日志长度从开始到结束:579127 秒(160.87 小时) oplog 第一个事件时间:2015 年 6 月 23 日星期二 16:53:13 GMT+0100(IST) oplog 最后一个事件时间:2015 年 6 月 30 日星期二 09:45:20 GMT+0100(IST) 现在:2015 年 6 月 30 日星期二 09:45:20 GMT+0100(IST)

自发生这种情况以来,服务器一直消耗大约 130 GB 的虚拟内存,并且性能一直很差。

我还必须对另一个辅助服务器进行完全同步(因为类似的问题),但没有任何变化(它生成了 2 个“本地”文件,并且 oplog 的大小仍然为 990MB)。

我在想:

  • “本地”数据库出现这种行为的原因是什么?

  • 如果“本地”数据库未被复制,为什么这种行为会影响性能?

  • 有没有办法将此辅助节点改回原来的样子(只有 2 个本地文件和一个较小的 oplog)?我知道可以更改 oplog 的大小,但我想知道我是否可以停止服务,删除“本地”文件以便它们再次同步。

任何其他建议都非常欢迎(:

相关内容