0

公式の C# ドライバー 1.8 を使用して Mongo に対して実行している非常に単純なクエリがあります。これは、約 50% の確率でクエリを実行して返されるだけです。単体テストがあり、クエリを実行すると、約 50% の時間が 1 秒未満で返されますが、他の時間は決して終了しません。

以下はクエリです

var q = Database.GetCollection<Stuff>("Stuff").AsQueryable()
    .Where(x => x.Partition == partitionName && x.PersistantId != null && (
        (x.When.DateStart > startingFrom && x.When.DateEnd == null) ||
        (x.When.DateEnd > startingFrom)));
return q.ToList();

以下のクエリを使用してクエリを取得し、MongoVue で実行すると、1 秒以内に応答を取得できます。

{ "Partition" : "PartitionID:53", "PersistantId" : { "$ne" : null }, "$or" : [{ "When.DateStart" : { "$gt" : ISODate("2012-04-01T06:00:00Z") }, "When.DateEnd" : null }, { "When.DateEnd" : { "$gt" : ISODate("2012-04-01T06:00:00Z") } }] }

おそらく 1.8 ドライバーまたは MongoDB 2.4.1 のバグのようです。コレクションには約 70,000 のアイテムしかなく、4 ギガのメモリと 2 つのプロセッサを備えた Windows 上で実行されている mongo サーバー上にあります。

確認できる診断ログやクエリのエラーはありますか?

4

1 に答える 1

0

mongoDB inbuild profiler を使用してください。クエリで実際に何が問題になっているのかを調べるのに役立つと思いますhttp://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/

于 2013-04-05T03:13:52.113 に答える