解读Mongostat和Mongotop输出

5

我正在使用 mongostatmongotop 对 MongoDB 进行性能分析。

我运行了 mongotop:

$> mongotop 30

而mongostat只是:

$> mongostat

输出结果为:

Mongotop:

                    ns       total        read       write      2012-11-23T01:32:37
           sapi.Socket      1222ms      1222ms         0ms
       sapi.ChargeSpot       999ms       999ms         0ms

Mongostat:

insert  query update delete getmore command flushes mapped  vsize    res faults          locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn     set repl       time 
     0   5351      0      0       0       1       0   608m  3.67g    64m      0          sapi:0.0%          0       0|0     1|0   569k     1m    63 capi-rs  PRI   12:32:41 
     0   4189      0      0       0       1       0   608m  3.67g    64m      0 knightsbridge:0.0%          0       0|0     0|0   499k   308k    63 capi-rs  PRI   12:32:42 

问题:

  • 对于mongotop输出,因为我运行它来报告每30秒间隔,那么例如sapi.Socket总共1222ms读取的意思是:

    在30秒间隔内,1222ms用于执行从集合sapi.Socket中读取查询。

    这意味着在30秒内,mongo只忙于处理读取查询2,221ms(1,222ms + 999ms),换句话说,mongo在其他27秒内处于空闲状态?

  • 对于mongostat输出,看起来mongo正在处理大约5K个查询/秒,这是否会让mongo有些吃力,还是mongo能够处理更多的查询?这些查询是基本的(通过索引键查找)。

1
从mongostat的数据来看,你并没有充分利用这个Mongo实例。在不同的服务器或使用不同的数据时,限制可能会有很大的不同。 - Asya Kamsky
那么我的理解是正确的吗?也就是说 MongoDB 在 3 秒内一直在查询,而在后面的 27 秒中则是空闲的? - Dzhu
@Dzhu,我同意Asya Kamsky的说法:我们工作中使用的Mongo数据库通常每秒处理超过12,000个查询。除非您经常看到大约15K的查询,否则不必担心。 - Alexej Magura
2个回答

2

所有的每秒操作指标都将是相对于您特定服务器配置和集群架构的相对指标。但您并没有使用5k个查询来推动Mongo。

一个补充工具可以使用的是DB分析器。在这种情况下,分析器将捕获所有操作到名为system.profile的系统集合中。然后,您可以更深入地了解各个查询以及它们的性能。

//以下是仅针对查询操作而不是插入、删除或命令的诊断示例,针对名为dfl和集合名为test的DB。

db.system.profile.find({op: {$eq : 'query'}, ns: 'dfl.test'})

//检查您的分析器状态 db.getProfilingStatus()

//将分析器设置为所有操作 db.setProfilingLevel(2)


0

对于性能调优,我们已经看到了explainhintprofile选项。但是如果我们想要查看程序内部的高层级并找出它花费时间的地方,我们该怎么做呢?我们有一个名为Mongotop的工具,它以Unix命令top命名。要在shell上查看日志,请使用命令mongotop seconds——其中seconds是打印下一条日志条目之前的秒数。

例如:mongotop 3


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接