У меня есть запрос, который занимает слишком много времени для завершения. Мне нравится выполнять некоторые тесты производительности, но после того, как я проверил один раз (что занимает в настоящее время ~ 30 секунд), запрос начинает работать намного быстрее (< 1 секунда). Я предполагаю, что это должно быть с кешированием mongodb. Есть ли способ отключить кеширование mongodb или другим способом, я могу проверить производительность?Как проверить производительность запросов mongodb без кеша
Я использую mongodb, размещенный в mongohq. Программа с Ruby On Rails 3. Вот это объяснить:
{"cursor"=>"BtreeCursor start_-1", "nscanned"=>5276, "nscannedObjects"=>5276, "n"=>25, "millis"=>3264, "nYields"=>0, "nChunkSkips"=>0, "isMultiKey"=>false, "indexOnly"=>false, "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}, "allPlans"=>[{"cursor"=>"BtreeCursor attendees_count_-1", "indexBounds"=>{"attendees_count"=>[[1.7976931348623157e+308, 1]]}}, {"cursor"=>"BtreeCursor images_count_-1", "indexBounds"=>{"images_count"=>[[1.7976931348623157e+308, 2]]}}, {"cursor"=>"BtreeCursor start_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor start_-1_end_-1", "indexBounds"=>{"start"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]], "end"=>[[{"$maxElement"=>1}, {"$minElement"=>1}]]}}, {"cursor"=>"BtreeCursor attendees._id_1 multi", "indexBounds"=>{"attendees._id"=>[[BSON::ObjectId('4f0b621e94bb688563000007'),BSON::ObjectId('4f0b621e94bb688563000007')], [BSON::ObjectId('4f0b647d5a8c00acde05236f'), BSON::ObjectId('4f0b647d5a8c00acde05236f')], [BSON::ObjectId('4f0b647d5a8c00acde052370'), BSON::ObjectId('4f0b647d5a8c00acde052370')], [BSON::ObjectId('4f0b647d5a8c00acde052371'), BSON::ObjectId('4f0b647d5a8c00acde052371')], [BSON::ObjectId('4f0b647d5a8c00acde052372'), BSON::ObjectId('4f0b647d5a8c00acde052372')], [BSON::ObjectId('4f0b647d5a8c00acde052373') ... (lots of Object IDs)]]}}}
Обратите внимание, что я должен был укоротить некоторые из объяснить, потому что это было слишком долго. Где «много идентификаторов объектов» было много идентификаторов объектов (~ 400).
Спасибо всем
Я все еще хочу, чтобы мой первоначальный запрос работать быстрее, потому что я не могу загрузить все документы в памяти. Итак, я уже использовал объяснение и увидел, что он сканирует ~ 5000 документов для запроса запроса, и я думаю, что 30 секунд слишком много для 5000 документов. Поэтому я хочу продолжать делать один и тот же запрос без кеша, поэтому я не могу проверить, что не так. – Gluz
Был ли запрос использован индексом? Не стесняйтесь добавлять объяснения к вопросу, и я могу взглянуть на результат. –
Добавлено в исходное сообщение. – Gluz