公式の 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 サーバー上にあります。
確認できる診断ログやクエリのエラーはありますか?