0

今日は、これら 2 つのパラメーター "profile" と "slowms" をテストしたいと思います。以下は私のケースです:

profile は 1 で、slowms は 200 です

  1. >./mongod --dbpath /data/db --fork --profile 1 --slowms 200
  2. クエリを実行すると、このクエリのコストは 415 ミリ秒でした
  3. ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
  4. クエリをもう一度実行すると、このクエリのコストは 110 ミリ秒でした
  5. ログ ファイルには関連する操作メッセージがありません。system.profile には関連するドキュメントがありません。

これら 2 つのパラメータ「profile」と「slowms」を更新します

profile は 2 で、slowms は 200 です

  1. >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
  2. クエリを実行すると、このクエリに 410 ミリ秒かかりました
  3. ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
  4. もう一度クエリを実行すると、このクエリのコストは 100 ミリ秒になりました
  5. ログ ファイルには関連する操作メッセージがありません。system.profile には関連するドキュメントがありません。

パラメータ「プロファイル」が 2 の場合、ログ ファイルと system.profile に関連情報がないのはなぜですか? ありがとう!

4

1 に答える 1

1

遅いクエリはすべて mongod ログに書き込まれます。デフォルトslowms値は 100ms です。

MongoDBプロファイリング レベルでは、データベースの system.profile キャップ付きコレクションに追加情報を書き込むことができます。

プロファイリング レベルは次のとおりです。

0 - off
1 - write slow operations 
    to the system.profile collection
2 - write all operations to the system.profile collection

プロファイリング レベルをコマンド ラインまたは構成ファイルの引数として渡すと、すべてのデータベースのデフォルトに影響します。シェル内でdb.setProfilingLevel(..)andを使用して、データベースごとのプロファイリング レベルを設定または取得することもできます。db.getProfilingLevel(..)mongo

だからあなたの最初のテストのために:

  1. ./mongod --dbpath /data/db --fork --profile 1 --slowms 200
  2. クエリを実行すると、このクエリのコストは 415 ミリ秒でした
  3. ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
  4. クエリをもう一度実行すると、このクエリのコストは 110 ミリ秒でした
  5. ログ ファイルには関連する操作メッセージがありません。system.profile には関連するドキュメントの更新がありません。

これは、プロファイリングを 1 に設定し、スロームを 200 ミリ秒にした場合の予想される結果です。

  • 遅いクエリ (415 ミリ秒 > 200 ミリ秒) が system.profile とログ ファイルに記録されています。
  • 2 番目のクエリ (110 ミリ秒 < 200 ミリ秒) は遅いクエリとは見なされないため、ログに記録されず、system.profile に保存されません。

2 番目のテストの場合:

  1. >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
  2. クエリを実行すると、このクエリに 410 ミリ秒かかりました
  3. ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
  4. もう一度クエリを実行すると、このクエリのコストは 100 ミリ秒になりました
  5. ログ ファイルには関連する操作メッセージがありません。system.profile には関連するドキュメントがありません。

    • あなたの遅いクエリは両方に記録されています
    • 2 番目のクエリは遅くはありませんが、プロファイル レベル 2 として system.profile に記録されます。

プロファイリング レベル 2 では、さらに多くのエントリが system.profile に収集されることに注意してください。find() のデフォルトの順序は、最も古いものから最も新しいものへの順序になるため、特定のコレクションの最新のクエリを表示したい場合は、逆の自然な順序で並べ替える必要があります。

たとえばpeople、データベース内のコレクションの最後のクエリを見つけるには、次のような名前空間testを検索できます。test.people

db.system.profile.find({'ns':'test.people'}).sort({$natural:-1}).limit(1)
于 2012-09-12T14:14:25.713 に答える