2

我已经配置了我的 MongoDB 2.0.2 实例(更新:也尝试使用 v2.2.0 实例)以将所有操作记录到system.profile集合中(即,db.setProfilingLevel(2)),并试图准确查看应用程序在插入时插入了哪些数据调用 save() 获取文档。

我可以在集合中看到“插入”操作system.profile,但它不包括正在插入的数据。这是为什么?

相反,记录在中的更新操作system.profile具有显示数据的“updateobj”属性。

这是来自 2.2.0 实例的示例。如您所见,配置文件日志包含一个带有“updateObj”数据的更新条目。但是,插入没有关于插入内容的任何信息。

> use test;
switched to db test
> db.getProfilingStatus();
{ "was" : 2, "slowms" : 100 }
> show collections;
cartoons
system.indexes
system.profile
> db.foobar.insert({ "blah": true });
> db.foobar.update({ "blah": true }, { $set: { blerg: 1 } });
> db.system.profile.find({ ns:"test.foobar" });
{
  "ts": ISODate("2012-09-25T20:37:40.287Z"),
  "op": "insert",
  "ns": "test.foobar",
  "keyUpdates": 0,
  "numYield": 0,
  "lockStats": {
    "timeLockedMicros": {
      "r": NumberLong(0),
      "w": NumberLong(2028)
    },
    "timeAcquiringMicros": {
      "r": NumberLong(0),
      "w": NumberLong(10)
    }
  },
  "millis": 2,
  "client": "127.0.0.1",
  "user": ""
}{
  "ts": ISODate("2012-09-25T20:38:11.454Z"),
  "op": "update",
  "ns": "test.foobar",
  "query": {
    "blah": true
  },
  "updateobj": {
    "$set": {
      "blerg": 1
    }
  },
  "nscanned": 1,
  "moved": true,
  "nmoved": 1,
  "nupdated": 1,
  "keyUpdates": 0,
  "numYield": 0,
  "lockStats": {
    "timeLockedMicros": {
      "r": NumberLong(0),
      "w": NumberLong(1797)
    },
    "timeAcquiringMicros": {
      "r": NumberLong(0),
      "w": NumberLong(9)
    }
  },
  "millis": 1,
  "client": "127.0.0.1",
  "user": ""
}
4

1 回答 1

1

很抱歉最初误导您,事实证明这是故意的(我最初的回应与这是一个记录缓慢操作的错误有关)。不这样做背后的想法是,通过打开它,您只会自动将写入负载加倍,因为您实际上只是将相同的信息(实际上更多一点)写入了两次。

由于分析的想法通常是解决性能问题,因此默认情况下并未实施。但是,它已被要求作为一个选项:

https://jira.mongodb.org/browse/SERVER-3848

正如您所看到的,它还没有计划一个版本,但是在决定实施什么时,投票和评论概述了为什么这会很有帮助。

于 2012-09-07T14:28:23.520 回答