2015-06-22 165 views
3

我们在副本中有3个实例。主要有2核CPU和4 GB RAM。次要1核CPU和4 GB RAM。具有1个核心CPU和2 GB RAM的仲裁器。带有WiredTiger的MongoDB 3:高CPU负载

第一测试:

mongodb的-ORG-服务器2.6.10-1.x86_64

logpath=/var/log/mongodb/mongod.log 
logappend=true 
fork=true 
dbpath=/mnt/mongo 
pidfilepath=/var/run/mongodb/mongod.pid 

和第二测试:mongodb的-ORG-服务器3.0.4-1.x86_64

processManagement: 
    pidFilePath: "/var/run/mongodb/mongod.pid" 
    fork: true 
storage: 
    dbPath: "/mnt/mongo/" 
    engine: "wiredTiger" 
    wiredTiger: 
     collectionConfig: 
      blockCompressor: none 
     engineConfig: 
      cacheSizeGB: 2 
      journalCompressor: none 
     indexConfig: 
      prefixCompression: false 
systemLog: 
    destination: file 
    path: "/var/log/mongodb/mongod.log" 
    logAppend: true 
replication: 
    replSetName: testrepl 

CPU使用率:http://i.imgur.com/Nmj021g.png

在相同负载测试我们对MongoDB的2个CPU负载3与WiredTiger引擎。

MongoDB的统计:http://i.imgur.com/cxrfUIC.png

所以,问题是为什么MongoDB的3 WiredTiger使用2倍以上CPU? WiredTiger是否正常?数据库中的数据在测试之间没有改变。两次都有相同的负载测试场景。

回答

1

[编辑:答案讨论一般WiredTiger,但不是专门针对这个问题。见评论。]

是的,这是正常的。 WiredTiger compresses the data,成本CPU。建议提供足够的CPU,因为使用WiredTiger时,CPU会成为瓶颈。请参阅更多performance tips

以我们为例,在相同的MMAPv1(旧存储引擎)和WiredTiger服务器之间,CPU使用率增加了约2倍,而数据存储容量减少了3倍-5倍。数据也被压缩在RAM中,因此您可以将更多索引/缓存放入相同数量的RAM中。

+0

压缩似乎在上面的例子中被关闭:'blockCompressor'为'none','journalCompressor'为'none',并且'prefixCompression'为'false'。 –

+0

我的坏,没有注意到。这可能是WiredTiger如何工作的一些细节,可能未针对运行W/O压缩进行优化。我建议[提交bug](https://jira.mongodb.org/secure/Dashboard.jspa)。 –

+0

是的,它的确很好奇。通常情况下,压缩是一种性能优势,所以我建议再次运行测试并打开精简压缩。我敢打赌,这有一个改进。 –