Руководство по анализу метрик производительности MongoDB с помощью mongotop и mongostat
Используйте mongotop и mongostat для выявления горячих коллекций, нагрузки на ресурсы, всплесков подключений и медленных паттернов MongoDB.
Руководство по анализу метрик производительности MongoDB с помощью mongotop и mongostat
Проблемы с производительностью MongoDB часто проявляются в виде медленных страниц, задержек записи или внезапных всплесков подключений. mongotop и mongostat, устанавливаемые вместе с MongoDB Database Tools, предоставляют быстрый терминальный обзор текущего состояния сервера.
Это руководство показывает, как интерпретировать вывод этих инструментов во время типичных инцидентов, а затем связывать результаты с вероятными дальнейшими проверками, такими как индексы, форма запросов, пул соединений и нагрузка на диск.
Понимание mongotop
mongotop предоставляет обзор операций чтения и записи, выполняемых на ваших экземплярах MongoDB, в реальном времени. Он отображает время, затраченное каждой коллекцией на операции чтения или записи за указанный интервал. Это особенно полезно для выявления коллекций, испытывающих наибольшую активность и потенциально являющихся источником снижения производительности.
Ключевые метрики, предоставляемые mongotop:
- ns: Пространство имен коллекции (база_данных.коллекция).
- total: Время, затраченное на чтение и запись в пространство имен в течение интервала выборки.
- read: Время, затраченное на операции чтения в течение интервала выборки.
- write: Время, затраченное на операции записи в течение интервала выборки.
Как использовать mongotop:
Вы можете запустить mongotop прямо из терминала, если у вас установлены инструменты MongoDB Database Tools и они доступны в PATH. По умолчанию обновление происходит каждую секунду. Вы также можете указать интервал в секундах.
mongotop
Чтобы указать интервал обновления (например, каждые 5 секунд):
mongotop 5
Для запуска mongotop для экземпляра MongoDB, работающего на другом хосте и порту:
mongotop --host <имя_хоста> --port <порт>
Интерпретация вывода mongotop:
- Высокое время
writeдля конкретной коллекции: Коллекция испытывает интенсивную нагрузку на запись. Проверьте объем записи, рост документов, индексы, затрагиваемые записью, и необходимость шардирования рабочей нагрузки. - Высокое время
read: Проверьте планы запросов для этой коллекции. Отсутствующие индексы, большие результирующие наборы и сканирования при агрегации часто проявляются здесь. - Коллекции с постоянно высоким временем
total: Это ваши самые горячие коллекции. Внимательно следите за их индексами, рабочим набором и шаблонами запросов.
Понимание mongostat
mongostat предоставляет более широкий обзор производительности и использования ресурсов экземпляра MongoDB в реальном времени. Он собирает и отображает различные метрики состояния сервера, включая операции в секунду, сетевой трафик, дисковый ввод-вывод и использование памяти.
Ключевые метрики, предоставляемые mongostat:
- insert: Операции вставки в секунду.
- query: Операции запросов в секунду.
- update: Операции обновления в секунду.
- delete: Операции удаления в секунду.
- getmore: Операции getmore в секунду (используются для курсоров).
- command: Операции команд в секунду.
- dirty или dirty %: Данные кэша WiredTiger, измененные в памяти, но еще не записанные на диск. Точное название столбца зависит от версий MongoDB и инструментов.
- used или used %: Использование кэша WiredTiger. Точное название столбца зависит от версий MongoDB и инструментов.
- conn: Текущее количество подключений.
- networkIn: Сетевой трафик, полученный сервером (в байтах).
- networkOut: Сетевой трафик, отправленный сервером (в байтах).
- res: Размер резидентной памяти, используемой процессом MongoDB (в МБ).
- qr|qw: Количество операций чтения и записи в очереди, если столбец доступен.
- ar|aw: Количество активных клиентов чтения и записи, если столбец доступен.
Как использовать mongostat:
mongostat также является утилитой командной строки. Как и mongotop, она обновляется периодически, с интервалом по умолчанию 5 секунд. Вы можете указать другой интервал и параметры подключения.
mongostat
Чтобы указать интервал обновления (например, каждые 2 секунды):
mongostat 2
Для подключения к удаленному экземпляру MongoDB:
mongostat --host <имя_хоста> --port <порт>
Интерпретация вывода mongostat:
- Высокие показатели
insert,query,updateилиdelete: Указывает на высокую операционную нагрузку. Следите за этими метриками вместе с другими, чтобы понять, успевает ли система обрабатывать нагрузку. - Высокое значение
conn: Большое количество подключений может создавать нагрузку на ресурсы сервера. Если это значение неожиданно высокое, проверьте пул соединений в вашем приложении. - Высокое значение
networkInилиnetworkOut: Указывает на значительную передачу данных. Это может быть связано с большими запросами, трафиком репликации или возвратом больших результирующих наборов. - Высокое значение
res: Процесс MongoDB потребляет много оперативной памяти. Убедитесь, что на сервере достаточно памяти, и проверьте наличие неэффективных запросов или больших наборов данных, которые могут способствовать высокому использованию памяти. - Высокое значение
qr|qw: Указывает на то, что операции чтения или записи ставятся в очередь, что обычно свидетельствует о конкуренции за ресурсы или рабочей нагрузке, которую сервер не может обработать достаточно быстро. - Высокие значения
dirtyилиusedкэша: Если давление на кэш WiredTiger остается высоким, ваш рабочий набор может не помещаться в памяти, или запись на диск может отставать. - Медленные запросы при низких показателях операций: Используйте профилировщик, журнал медленных запросов или
explain(), чтобы проверить, не сканируют ли запросы слишком много документов. Современный выводmongostatне позволяет надежно определить процент пропусков индексов для развертываний WiredTiger.
Практические примеры и сценарии устранения неполадок
Сценарий 1: Медленная производительность приложения
- Запустите
mongostat: Обратите внимание на показателиqr,aw,insert,query,update,delete. Еслиqrилиawвысоки, или если показатели операций высоки, но не обрабатываются быстро, это указывает на наличие отставания. - Запустите
mongotop: Определите, какие коллекции испытывают наибольшее времяread msиwrite ms. Коллекция с высокой активностью записи может замедлять другие операции. - Проверьте планы запросов: Для горячих коллекций, выявленных с помощью
mongotop, выполнитеexplain("executionStats")для типичных медленных запросов. - Проанализируйте
networkIn/networkOutвmongostat: Если они необычно высоки, ищите большие результирующие наборы, большие агрегации или трафик репликации.
Сценарий 2: Высокая загрузка ЦП или памяти
- Запустите
mongostat: Отслеживайтеres(резидентная память) и загрузку ЦП (часто наблюдаемую с помощью системных инструментов, таких какtopилиhtop, ноmongostatдает специфичную для БД перспективу). Высокое значениеresможет коррелировать с кэшем WiredTiger (used %). - Изучите
mongotop: Высокое время чтения/записи для конкретных коллекций может способствовать высокой загрузке ЦП. - Посмотрите на показатели операций в
mongostat: Если операции вставки/обновления/удаления чрезвычайно высоки, это естественным образом потребляет ЦП. - Исследуйте кэш WiredTiger и дисковые метрики: Если грязный кэш остается высоким, а запись приложения замедляется, сравните вывод MongoDB с задержкой диска хоста и насыщением ввода-вывода.
Сценарий 3: Отставание репликации
Хотя mongotop и mongostat напрямую не измеряют отставание репликации, они важны для понимания причины отставания.
- Запустите
mongostatна primary: Ищите высокие значенияqrилиaw, высокие показатели операций записи или высокую загрузку ЦП/памяти. Если primary перегружен, он не может эффективно записывать в свой oplog, что приводит к отставанию на secondary. - Запустите
mongostatна secondary: Наблюдайте за его операциями чтения/записи. Если secondary медленно применяет записи oplog, это может быть связано с недостаточными ресурсами на secondary или неэффективными запросами/операциями.
Советы и лучшие практики
- Регулярно запускайте инструменты: Не ждите возникновения проблем с производительностью. Заблаговременно отслеживайте свои экземпляры MongoDB.
- Установите базовые показатели: Поймите, что является "нормой" для вашего развертывания. Это облегчит выявление отклонений.
- Комбинируйте с другими инструментами:
mongotopиmongostatотлично подходят для моментальных снимков в реальном времени. Для исторического анализа рассмотрите использование встроенного мониторинга производительности MongoDB (например,db.serverStatus(),db.stats()) или внешних инструментов, таких как Prometheus с MongoDB Exporter, или сервисов мониторинга облачных провайдеров. - Понимайте свой рабочий набор: Знание размера вашего активного набора данных имеет решающее значение для управления памятью и понимания эффективности кэша WiredTiger.
- Сосредоточьтесь на планах запросов: Используйте
explain("executionStats")и журнал медленных запросов, чтобы подтвердить, являются ли причиной сканирования отсутствующие или неэффективные индексы. - Рассмотрите пул соединений: Высокие значения
connчасто можно уменьшить, внедрив правильный пул соединений на уровне приложения.
Вывод
Используйте mongostat для понимания нагрузки на уровне сервера и mongotop для поиска коллекций, получающих наибольшее внимание при чтении или записи. Когда любой из инструментов указывает на горячую область, подтвердите причину с помощью планов запросов, журналов медленных запросов, метрик хоста и поведения подключений приложения, прежде чем изменять индексы или масштабировать развертывание.