Я выполняю следующую команду mongodb в оболочке mongo
db.coll.aggregate(...)
и я вижу список результатов. но можно ли увидеть запрос время исполнения? Существует ли эквивалентная функция для метода объяснения для запросов агрегирования.
Я выполняю следующую команду mongodb в оболочке mongo
db.coll.aggregate(...)
и я вижу список результатов. но можно ли увидеть запрос время исполнения? Существует ли эквивалентная функция для метода объяснения для запросов агрегирования.
Я напишу ответ, чтобы объяснить это лучше.
В принципе функциональность explain() для структуры агрегации пока отсутствует: https://jira.mongodb.org/browse/SERVER-4504
Однако есть способ измерения стороны клиента, но не без его недостатков:
Как бы то ни было, вы можете получить немного точный результат, выполнив его в консоли MongoDB на том же сервере, что и mongos
/mongod
. Это создаст очень мало в betweens, все еще слишком много, но достаточно, чтобы, возможно, получить чтение, которое вы могли бы доверять. Таким образом, вы можете использовать ответ @Zagorulkin в этом положении.
var before = new Date()
#aggregation query
var after = new Date()
execution_mills = after - before
Я вижу, что в mongodb есть возможность использовать эту две команды:
db.setProfilingLevel(2)
и поэтому после запроса вы можете использовать db.system.profile.find(), чтобы увидеть время выполнения запроса и другие
Вы можете добавить функцию 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()
Или вы можете установить отличный mongo-hacker, который автоматически умножает каждый запрос, pretty()
отталкивает его, раскрашивает вывод, сортирует ключи и многое другое:
Попробуйте .explain("executionStats")
:
db.inventory.find(
{ quantity: { $gte: 100, $lte: 200 } }
).explain("executionStats")
Что возвращает очень подробный JSON со временем в "executionTimeMillis"
, например:
{
"queryPlanner" : {
...
},
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 3,
"executionTimeMillis" : 0,
...
Подробнее: https://docs.mongodb.com/manual/tutorial/analyze-query-plan/#evaluate-the-performance-of-a-query