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

最初に誤解を招いたことをお詫びします。これは意図的なものであることが判明しました (私の最初の応答は、これが低速オペレーションのログのバグであることに関連していました)。これを行わない背後にある考え方は、これをオンにすると書き込み負荷が自動的に 2 倍になるということです。これは、事実上、同じ情報 (実際にはもう少し多く) を 2 回書き込むだけだからです。

プロファイリングの目的は通常、パフォーマンスの問題をトラブルシューティングすることであるため、デフォルトでは実装されていません。ただし、オプションとして要求されています。

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

ご覧のとおり、バージョンの予定はまだありませんが、これが役立つ理由を概説する投票とコメントは、実装するものを決定する際に役立ちます。

于 2012-09-07T14:28:23.520 に答える