MongoDB日志中的时间戳-执行时间的开始还是结束?

MongoDB日志中的时间戳-执行时间的开始还是结束?,mongodb,Mongodb,此MongoDB实例的典型负载是每秒300个命令,通常每个命令都在50ms内完成,即使在使用所有可能查询的负载测试下也是如此。有时会出现一个问题,其中一个命令块需要几秒钟以上的时间 mongod日志中有问题的完整命令块的时间戳具有相同的值。除了下面包含的示例日志行之外,日志中还有20个其他命令(插入和更新的混合),时间戳完全相同,为10:32:30.456,但记录的执行时间非常不同,从2秒到6秒不等 我在mongod日志中看到的时间戳是命令启动的时间,还是命令完成的时间 mongod日志条目示例

此MongoDB实例的典型负载是每秒300个命令,通常每个命令都在50ms内完成,即使在使用所有可能查询的负载测试下也是如此。有时会出现一个问题,其中一个命令块需要几秒钟以上的时间

mongod日志中有问题的完整命令块的时间戳具有相同的值。除了下面包含的示例日志行之外,日志中还有20个其他命令(插入和更新的混合),时间戳完全相同,为10:32:30.456,但记录的执行时间非常不同,从2秒到6秒不等

我在mongod日志中看到的时间戳是命令启动的时间,还是命令完成的时间

mongod日志条目示例:

2016-03-10T10:32:30.456+0000 I命令[conn94]命令sampleDb.sampleEvents命令:插入{…}n插入:1键更新:0写冲突:0 numields:0 reslen:40锁:{Global:{acquireCount:{r:1,w:1}},数据库:{acquireCount:{w:1},集合:{acquireCount w:1}}协议:op\query 4555ms


为了解决同样的问题,我找到了一套工具,这些工具对分析mongod日志文件非常有帮助:。 它的一个名为
mplotquerys
的工具有一个选项
——操作开始时间
,如下所示:

事件完成后会写入日志文件,默认情况下,
mplotquerys
会在该时间点在x轴上绘制操作。有时,查看操作何时开始会很有用。对于具有持续时间的操作(查询、更新等),
mplotquerys
可以减去持续时间,并在操作开始时绘制操作。使用
--optime start
标志打开此功能

这是我在这个话题上找到的唯一线索

PS:另一个可视化日志条目的工具称为
mlogvis
,它没有这个选项,但下面是一个代码片段,它做了同样的事情:

//这将采用数据结构中的所有datetime字段
if(!d.hasOwnProperty('logtime')和&d[this.yaxis_字段]&和&d.datetime){
d、 logtime=d.datetime;
如果(d.持续时间>0){
var logtime=新日期(d.datetime);
var starttime=新日期(logtime.valueOf()-d.duration-(logtime.getTimezoneOffset()*60000));
d、 datetime=starttime.toISOString();
d、 line_str=d.datetime+'-'+d.line_str;
}
}
为此,您需要修改生成的html文件,并将代码段添加到
this.data.filter
函数中
MLogVis.prototype.\u recalc\u data\u extends

逻辑将显示“after”,因此显示“finished”,尽管它确实没有在任何地方记录,因此您需要查看代码以确定。由于当然存在执行时间,因此必须先查找命令,然后才能收集和写入此类数据。然后对操作使用“开始”时间戳也是没有意义的,因为如果一个操作一个接一个地开始,但首先完成,则记录的时间戳将不符合顺序。无论如何,日志文件的典型约定是时间戳指的是写入日志条目的时间。