8

我在复制集中的主服务器上的 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    414    388      0    1218     444       0  24.2g  51.4g     3g      0  <redacted>:9.6%          0       0|0     0|0   225k   441k   463 mover  PRI   03:26:30
     0    469    457      0    1352     516       0  24.2g  51.4g     3g      0 <redacted>:10.6%          0       0|0     0|0   258k   498k   463 mover  PRI   03:26:31
     0    478    482      0    1430     548       0  24.2g  51.4g     3g      0 <redacted>:12.0%          0       0|0     0|0   271k   512k   463 mover  PRI   03:26:32

如您所见,getmore 计数在任何其他形式的操作中占主导地位。这是最近才开始发生的事情,正如所附的操作计数器图表所示。根据我的阅读,这些可能来自副本集操作,但就我而言,我想找到一种方法来确认这一点。无论如何我可以确定这些 getmore 操作的来源吗?

在此处输入图像描述

更新:添加了来自 MMS 的 opcounters 的新屏幕截图,其中包括图例。

4

2 回答 2

12

Agetmore表示从打开的游标中获取了“下一批结果”。这可能表明您的应用程序必须获取多个批次的大型结果集,或长时间运行的操作,例如复制拖尾 oplog。

鉴于从 1 月 26 日开始有很大的飞跃,我会考虑您是否更改了应用程序或使用中可能与此更改相关的任何内容。也许您开始了一个新的备份例程,或者您的一个常见查询现在有足够的数据需要多个批次。

如果您想确定增加getmore计数的来源,您可以看到这些记录为logLevel1 或更高。

logLevel参数可以在启动时设置或在运行时调整。日志会随着额外的细节而迅速变大,因此我建议在 MMS 中指示的高峰期之一期间增加一小段时间以采样 getmores。

要增加logLevel外壳mongo使用:

db.adminCommand( { setParameter: 1, logLevel: 1 } )

您可以使用以下命令更改回默认值logLevel

db.adminCommand( { setParameter: 1, logLevel: 0 } )

增加 之后logLevel,您应该能够在您的 mongod 日志中查找带有“getmore”的行,类似于:

Sun Feb  9 09:31:14.573 [conn8527] getmore local.oplog.rs query: { .. }

“getmore”之后(查询之前)的文本表示命名空间(即“database.collection”)。

来自复制或跟踪 oplog 的getmore任何其他应用程序(例如 MMS 备份或 MongoDB 连接器)的查询将始终位于命名空间上。local.oplog.rs

于 2014-02-09T14:59:31.870 回答
2

里程可能会有所不同,但我预计大的getmore计数仅仅是获取多少结果的指标。根据定义,它是一个游标批处理请求,我看到的最直接的相关性是期望它是查询操作数的倍数。是的,这也包括复制,因为查询将由辅助节点发送到 oplog。

这是有道理的,因为每个查询都将设置一个游标以返回结果,该批次将被获取,并且当用尽时将发出新的操作。现在可以公平地说,对于大部分查询而言,每个请求使用最少数量的getmore操作是最佳的,但这可能不是最实用的方法。如前所述,YMMV

因此,我认为您的“安心”的一个相关性是查看正在执行的查询、返回的数据类型和结果数量。获取该信息只需使用Database Profiler,然后使用找到的结果。

oplog中的数据还应该与复制操作中出现峰值的高计数时间相关联,因此您应该也能够看到其影响。

于 2014-02-07T05:25:18.703 回答