在过去的 3 个月里,我的 MongoDB 服务器每 2 小时 10 分钟就会变得非常慢,非常准确。
我的服务器配置:
- 3个副本集,为了数据备份,其中1个有3600秒延迟。
- 副本集中的 3 个主服务器没有从服务器。
- 使用mongoose + node.js 提供rest api。
- 在 24 小时统计数据中,平均每秒大约 9 次读取和 1.5 次写入。
我在 stackoverflow 和谷歌搜索后做了什么:
- 重启服务器不能更改慢速间隔 2 小时 10 分钟
- 为我查询的所有字段创建索引,没有影响
- 删除一台服务器中的数据文件,用另一台服务器恢复,然后删除另一个服务器恢复,没有影响
- 转移主服务器,无影响
- 在数据库慢的时候运行'currentOps',我可以看到很多查询卡在那里,日志太多在这里粘贴,但没有看到一些异常查询。
- 在mongo控制台中,当数据库慢时检查“serverStatus”,命令等待数据库恢复。
- 当数据库运行缓慢时,“top”命令不会增加内存使用量。
- rest api 不访问数据库效果很好。
我猜可能有什么东西被锁定了,最可能的原因是它可能正在构建索引。我的数据库中有一些特别的东西:
- 我在一个数据库中有大约 14000 个集合,并且还在增加。一个集合中可能有 1 到 3000 条记录。
- 收藏数量和记录数量都在动态增加。
- 创建新集合时将指定索引字段。
我被这个问题困扰了 3 个月。任何意见/建议将不胜感激!
以下是我的日志文件中的一些日志:
Fri Jul 5 15:20:11.040 [conn2765] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 222694, after repl: 222694, at end: 222694 }
Fri Jul 5 17:30:09.367 [conn4711] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 199498, after repl: 199498, at end: 199528 }
Fri Jul 5 19:40:12.697 [conn6488] serverStatus was very slow: { after basic: 0, after asserts: 0, after backgroundFlushing: 0, after connections: 0, after cursors: 0, after dur: 0, after extra_info: 0, after globalLock: 0, after indexCounters: 0, after locks: 0, after network: 0, after opcounters: 0, after opcountersRepl: 0, after recordStats: 204061, after repl: 204061, at end: 204081 }
这是我的 pingdom 报告的屏幕截图,服务器每 2 小时 7 分钟就会停机 4 分钟。一开始,服务器每 2 小时 6 分钟就宕机 2 分钟。
[编辑 1] 来自主机提供商的更多监控结果: CPU http://i.minus.com/iZBNyMPzLSLRr.png DiskIO http://i.minus.com/ivgrHr0Ghoz92.png Connections http://i.minus.com/itbfYq0SSMlNs.png 周期性增加的连接是因为连接正在等待,并且当前连接的计数会累积直到数据库被解锁。 这不是因为流量太大。
最佳答案
我们发现了一个特定的 2:10 问题。在我们的例子中,它是由 MMS 执行的 dbStats。 我们不得不升级集群,问题得到解决。
关于node.js - MongoDB准确地每2小时10分钟减速一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17657909/