Я пытаюсь просмотреть некоторые журналы Mongo с помощью grep, пытаясь найти медленные операции, которые мне нужно оптимизировать. Медленное ведение журнала запросов установлено по умолчанию и регистрирует операции более 100 мс.
Я думаю, что можно с уверенностью сказать, что, вообще говоря, поиск COLLSCANS покажет запросы, требующие внимания. Менее ясно то, что если IXSCANS - это деталь, которую я должен искать.
Учитывая документацию MongoDB здесь:
https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use
Насколько я понимаю, это двоичная ситуация, запрос - это COLLSCAN или IXSCAN. Поэтому, если я наберу IXSCAN, я буду смотреть на ВСЕ медленные запросы, которые не являются COLLSCANS. Это правда?
Я пытаюсь просмотреть некоторые журналы Mongo с помощью grep, пытаясь найти медленные операции, которые мне нужно оптимизировать. Медленное ведение журнала запросов установлено по умолчанию и регистрирует операции более 100 мс.
Вместо того, чтобы просматривать журналы MongoDB, я настоятельно рекомендую использовать скрипты из открытого исходного кода. mtools
проект. ПРИМЕЧАНИЕ: я не оригинал mtools
автор, но я соавтор.
mtools
представляет собой набор сценариев Python, созданный на основе мучений, связанных с поиском информации, представляющей интерес для производственных развертываний MongoDB, через гигабайты журналов. Ключевые сценарии предназначены для того, чтобы вписаться в типичный рабочий процесс командной строки вывода конвейера через последовательные фильтры (например, mlogfilter --scan | mplotqueries
).
Например:
mloginfo --queries
является хорошей отправной точкой: он объединяет шаблоны запросов, чтобы вы могли сосредоточиться на часто выполняемых запросах, которые в целом влияют на ваше развертывание.mlogfilter
по сути, grep для журналов MongoDB: вы можете фильтровать строки журнала по пространству имен, продолжительности, подключению, шаблону и другим критериям. В --scan
Эта опция полезна для выявления неэффективных запросов, которые не обязательно являются сканированием коллекции.mplotqueries
- это инструмент для визуализации журналов, который может быть очень полезным для выявления закономерностей и выбросов.Я думаю, что можно с уверенностью сказать, что, вообще говоря, поиск COLLSCANS покажет запросы, требующие внимания. Менее ясно то, что если IXSCANS - это деталь, которую я должен искать.
Сканирование коллекций обычно представляет интерес, но также может быть результатом разовых запросов или ожидаемого использования небольшой коллекции. Вместо того, чтобы сосредоточиться на типе запроса, я бы рассмотрел медленные запросы (или медленные операции в целом) для вашего развертывания, чтобы лучше понять, что вы могли бы улучшить. Использование индекса обычно хорошо, но бывает неэффективное использование индекса (например, сортировка в памяти или регулярные выражения без учета регистра), к которым стоит обратиться.
Насколько я понимаю, это двоичная ситуация, запрос - это COLLSCAN или IXSCAN. Поэтому, если я наберу IXSCAN, я буду смотреть на ВСЕ медленные запросы, которые не являются COLLSCANS. Это правда?
Если вы введете grep для IXSCAN
вы найдете все строки журнала, в которых упоминается IXSCAN
, но результат регистрации медленных запросов определенно не является двоичным и также зависит от версии сервера MongoDB. Хотя эффективное использование индекса является очевидной оптимизацией, существует ряд внутренних этапы планировщика запросов это может иметь отношение к пониманию производительности запроса.
Когда вы обнаруживаете в журналах интересный медленный запрос, следующим шагом обычно является более подробный просмотр explain output
. я использую explain(true)
(он же allPlansExecution
mode), так как здесь отображаются подробные сведения о рассмотренных планах запроса, а также о выигрышном плане. Если вы не знаете, как интерпретировать вывод объяснения для медленного запроса, я бы рекомендовал опубликовать на DBA StackExchange.
Стоит отметить, что объяснение запроса не является показателем реальной производительности рабочей нагрузки. При нормальной работе планы запросов кэшируются, а подробные explain
output специально повторно оценивает индексы-кандидаты и план запроса. Видеть Планы запросов в руководстве MongoDB для получения дополнительной информации.