解释Mongostat和Mongotop输出

Dzh*_*zhu 5 profiling mongodb

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

我跑mongotop:

$> mongotop 30
Run Code Online (Sandbox Code Playgroud)

和mongostat简单地说:

$> mongostat
Run Code Online (Sandbox Code Playgroud)

产出是:

Mongotop:

                    ns       total        read       write      2012-11-23T01:32:37
           sapi.Socket      1222ms      1222ms         0ms
       sapi.ChargeSpot       999ms       999ms         0ms
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

问题:

  • 对于mongotop输出,因为我运行它报告30秒间隔,例如sapi.Socket总共1222ms读取意味着:

    在30秒的时间间隔内,从集合sapi.Socket执行读取查询花费了1222ms

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

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

小智 2

每秒的所有操作指标都将是根据特定服务器配置和集群架构的相对指标。然而,您并没有使用 5k 查询来推送 Mongo。

可以使用的免费工具是数据库分析器。在这种情况下,探查器会将所有操作捕获到名为 system.profile 的系统集合中。然后,您可以进一步了解各个查询及其执行情况。

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

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

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

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