5

我正在使用mongostatand对 mongodb 进行一些分析mongotop

我运行 mongotop:

$> mongotop 30

和 mongostat 简单地说:

$> mongostat

输出是:

蒙戈托普:

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

蒙古国:

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,221 毫秒(1,222 毫秒 + 999 毫秒)处理读取查询,换句话说,mongo 在另外 27 秒内处于空闲状态?

  • 对于 mongostat 输出,看起来 mongo 每秒处理大约 5K 查询,这是推动 mongo 一点还是 mongo 有更多的能力?查询是基本的(按索引键查找)
4

2 回答 2

2

根据您的特定服务器的配置和集群架构,每秒所有操作指标将是一个相对指标。但是,您不会使用 5k 查询来推动 Mongo。

使用的免费工具是 DB profiler。在这种情况下,分析器会将所有操作捕获到名为 system.profile 的系统集合中。然后,您可以对单个查询及其执行方式获得更多见解。

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

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

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

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

于 2015-01-14T13:05:10.083 回答
0

对于性能调优,我们已经看到和explain选项。但是,如果我们想查看程序内部的高层并找出它花费时间的地方,我们该怎么做呢?我们以command命名。要查看 shell 上的日志,请使用命令- 其中是打印下一个日志条目之前的秒数。hintprofileMongotopUnixtopmongotop secondsseconds

例如:mongotop 3

于 2016-09-05T11:30:33.987 回答