遅いクエリはすべて 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
だからあなたの最初のテストのために:
- ./mongod --dbpath /data/db --fork --profile 1 --slowms 200
- クエリを実行すると、このクエリのコストは 415 ミリ秒でした
- ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
- クエリをもう一度実行すると、このクエリのコストは 110 ミリ秒でした
- ログ ファイルには関連する操作メッセージがありません。system.profile には関連するドキュメントの更新がありません。
これは、プロファイリングを 1 に設定し、スロームを 200 ミリ秒にした場合の予想される結果です。
- 遅いクエリ (415 ミリ秒 > 200 ミリ秒) が system.profile とログ ファイルに記録されています。
- 2 番目のクエリ (110 ミリ秒 < 200 ミリ秒) は遅いクエリとは見なされないため、ログに記録されず、system.profile に保存されません。
2 番目のテストの場合:
- >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
- クエリを実行すると、このクエリに 410 ミリ秒かかりました
- ログ ファイルには関連する操作メッセージがあり、system.profile には関連するドキュメントもあります。
- もう一度クエリを実行すると、このクエリのコストは 100 ミリ秒になりました
ログ ファイルには関連する操作メッセージがありません。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)