Подтвердить что ты не робот

Как найти запросы, не использующие индексы или медленные в mongodb

Есть ли способ найти запросы в mongodb, которые не используют индексы или являются SLOW? В MySQL это возможно со следующими настройками внутри файла конфигурации:

log-queries-not-using-indexes = 1
log_slow_queries = /tmp/slowmysql.log

спасибо, Дмитрий

4b9b3361

Ответ 1

Эквивалентным подходом в MongoDB было бы использовать профилировщик запросов для отслеживания и диагностики медленных запросов.

С профилированием, включенным для базы данных, медленные операции записываются в коллекцию system.profile capped (которая по умолчанию имеет размер 1 Мб). Вы можете настроить порог для медленных операций (по умолчанию 100 мс) с помощью параметра slowms.

Ответ 2

Сначала вы должны настроить профилирование, указав, какой уровень журнала вы хотите. Возможны 3 варианта:

  • 0 - сбой журнала
  • 1 - медленные запросы журнала
  • 2 - регистрировать все запросы

Вы делаете это, запустив дефамон mongod с параметрами --profile:

mongod --profile 2 --slowms 20

При этом журналы будут записаны в коллекцию system.profile, на которой вы можете выполнять запросы следующим образом:

  • найти все журналы в некоторой коллекции, упорядочивая по возрастающей метке времени:

db.system.profile.find( { ns:/<db>.<collection>/ } ).sort( { ts: 1 } );

  • поиск журналов запросов с более чем 5 миллисекундами:

db.system.profile.find( {millis : { $gt : 5 } } ).sort( { ts: 1} );

Ответ 3

Вы можете использовать следующие две опции mongod. Первый вариант не отвечает запросами, не использующими индекс (только для V 2.4), второй записывает запросы медленнее, чем порог ms (по умолчанию - 100 мс)

--notablescan

Forbids operations that require a table scan.

--slowms <value>

Defines the value of "slow," for the --profile option. The database logs all slow queries to the log, even when the profiler is not turned on. When the database profiler is on, mongod the profiler writes to the system.profile collection. See the profile command for more information on the database profiler.

Ответ 4

Вы можете использовать инструмент командной строки mongotail, чтобы прочитать журнал из профилировщика в консоли и с более читаемым форматом.

Сначала активируйте профайлер и установите пороговое значение в миллисекундах, чтобы профиль считал операцию медленной. В следующем примере порог устанавливается в 10 миллисекунд для базы данных с именем "sales":

$ mongotail sales -l 1
Profiling level set to level 1
$ mongotail sales -s 10
Threshold profiling set to 10 milliseconds

Затем, чтобы увидеть в "реальном времени" медленные запросы, с некоторой дополнительной информацией, такой как время каждого запроса, или сколько реестров необходимо "ходить", чтобы найти конкретный результат:

$ mongotail sales -f -m millis nscanned docsExamined
2016-08-11 15:09:10.930 QUERY   [ops] : {"deleted": {"$exists": false}, "prod_id": "367133"}. 8 returned. nscanned: 344502. millis: 12
2016-08-11 15:09:10.981 QUERY   [ops] : {"deleted": {"$exists": false}, "prod_id": "367440"}. 6 returned. nscanned: 345444. millis: 12
....

Ответ 5

Если кто-то попадает сюда из Google по этому старому вопросу, я обнаружил, что explain действительно помог мне исправить определенные запросы, которые, как я мог видеть, вызывали COLLSCAN из журналов.

Пример:

db.collection.find().explain()

Это даст вам знать, использует ли запрос COLLSCAN (Basic Cursor) или index (BTree).

https://docs.mongodb.com/manual/reference/method/cursor.explain/

Ответ 6

Хотя вы, очевидно, можете использовать Profiler очень аккуратную особенность Mongo DB, из-за которой я действительно влюбляюсь в нее, это Mongo DB MMS. Принимает менее 60 секунд и может управлять из любого места. Я уверен, вы полюбите его. https://mms.mongodb.com/

Ответ 7

Я использую https://worktheme.com. Кажется, до сих пор все запросы, связанные с запросами.

Я думаю, что MMS - это служба мониторинга для экземпляра db, аналогичная мониторингу инфраструктуры. Он основан на наличии нескольких счетчиков и построении их по времени (временные ряды данных). Однако он не дает большого понимания запросов, таких как осведомленность о типах запросов, их воздействии и т.д.