Извлечение самых медленных запросов и форм запросов из данных профилировщика
MongoDBПроизводительностьКоманда
// Recent slow operations (in the db where profiling is on; see set-profiling):
db.system.profile.find({ millis: { $gte: 100 } }, { ts: 1, ns: 1, op: 1, millis: 1, planSummary: 1, keysExamined: 1, docsExamined: 1, nreturned: 1, appName: 1 }).sort({ ts: -1 }).limit(20)
// Total time per query shape (those consuming the most time):
db.system.profile.aggregate([
{ $group: { _id: { ns: "$ns", plan: "$planSummary", shape: "$queryHash" }, n: { $sum: 1 }, totalMs: { $sum: "$millis" }, maxMs: { $max: "$millis" }, avgDocs: { $avg: "$docsExamined" } } },
{ $sort: { totalMs: -1 } },
{ $limit: 10 }
])
// Queries not using an index (COLLSCAN):
db.system.profile.find({ planSummary: "COLLSCAN" }, { ns: 1, millis: 1, command: 1 }).sort({ millis: -1 }).limit(10)Что делает
По записям коллекции system.profile выводит недавние медленные операции, суммарное время по форме запроса (queryHash) и запросы COLLSCAN без индекса.
Когда использовать
При жалобе на медленную работу, чтобы найти, какой запрос потребляет время сервера, и определить потребность в индексах.
Внимание
system.profile по умолчанию — ограниченная (capped) коллекция размером 1 MB, своя в каждой базе; на нагруженной системе записи перезаписываются за минуты, поэтому анализируйте, пока профилирование включено, или сразу после. Уровень профилирования 2 или slowms 0 записывает каждую операцию и добавляет значительные накладные расходы. Записи хранятся только на участнике, где выполнялась операция, и не реплицируются.
Связанные материалы
- Анализ плана запроса с реальной статистикой выполнения (explain executionStats)
- Поиск неиспользуемых индексов и их скрытие перед удалением (hideIndex)
- Подсчёт соединений по приложениям и клиентам (диагностика шторма подключений)
- Измерение давления на кэш WiredTiger (заполнение, доля грязных данных, вытеснение потоками приложения)