30

mongoシェルでfollowmongodbコマンドを実行します

db.coll.aggregate(...)

結果のリストが表示されます。しかし、クエリの実行時間を確認することは可能ですか?集計クエリのexplainメソッドに相当する関数はありますか?

4

5 に答える 5

36
var before = new Date()
#aggregation query
var after = new Date()
execution_mills = after - before
于 2012-12-24T13:47:56.230 に答える
15

(ホームディレクトリ内の)ファイルにtime関数を追加できます。.mongorc.js

function time(command) {
    const t1 = new Date();
    const result = command();
    const t2 = new Date();
    print("time: " + (t2 - t1) + "ms");
    return result; 
}

そして、あなたはそれを次のように使うことができます:

time(() => db.coll.aggregate(...))

注意

この方法では、関連する結果は得られませんdb.collection.find()

于 2016-12-09T10:16:50.663 に答える
12

mongodbでは、次の2つのコマンドを使用できる可能性があります。

  • db.setProfilingLevel(2)

  • したがって、クエリの後で、db.system.profile.find()を使用して、クエリの実行時間などを確認できます。

于 2012-12-29T18:05:17.860 に答える
9

または、優れたmongo-hackerをインストールすることもできます。このハッカーは、すべてのクエリの時間を自動的に計測し、それを処理pretty()し、出力に色を付け、キーを並べ替えます。

ここに画像の説明を入力してください

于 2014-04-29T09:05:46.123 に答える
8

これをよりよく説明するための答えを書きます。

基本的に、集約フレームワークのexplain()機能はまだありません:https ://jira.mongodb.org/browse/SERVER-4504

ただし、クライアント側を測定する方法はありますが、欠点がないわけではありません。

  • データベースを測定していません
  • アプリケーションを測定しています
  • パーツ間の未知数が多すぎて正確な読み取りを行うことができません。つまり、ドキュメントの結果がMongoDBサーバーによって作成され、シリアル化され、ネットワーク経由で送信されるまでに0.04ミリ秒かかったとは言えません。 -アプリによってシリアル化されてからハッシュに保存され、合計からその合計を差し引いて集計ベンチマークを取得できます。

mongosただし、 /と同じサーバー上のMongoDBコンソールで実行すると、わずかに正確な結果が得られる場合がありますmongod。これにより、間にはほとんど作成されませんが、それでも多すぎますが、大まかに信頼できる読み物を取得するには十分です。そのため、その位置で@Zagorulkinの回答を使用できます。

于 2012-12-24T14:20:08.807 に答える