Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Практические руководства
    • Все руководства
    • Развертывание веб-интерфейса Apache Kafka®
    • Миграция БД из стороннего кластера Apache Kafka® в Managed Service for Apache Kafka®
    • Перенос данных между кластерами Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for YDB в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for Greenplum® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MongoDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for MySQL® с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for OpenSearch с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for PostgreSQL с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Managed Service for Apache Kafka® в Data Streams с помощью Data Transfer
    • Поставка данных из Data Streams в Managed Service for YDB с помощью Data Transfer
    • Поставка данных из Data Streams в Managed Service for Apache Kafka® с помощью Data Transfer
    • Захват изменений YDB и поставка в YDS
    • Настройка Kafka Connect для работы с кластером Managed Service for Apache Kafka®
    • Автоматизация задач Query с помощью Managed Service for Apache Airflow™
    • Отправка запросов к API Yandex Cloud через Yandex Cloud Python SDK
    • Настройка SMTP-сервера для отправки уведомлений по электронной почте
    • Добавление данных в БД ClickHouse®
    • Миграция данных в Managed Service for ClickHouse® средствами ClickHouse®
    • Миграция данных в Managed Service for ClickHouse® при помощи Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for ClickHouse® с помощью Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse®
    • Обмен данными между Managed Service for ClickHouse® и Yandex Data Processing
    • Настройка Managed Service for ClickHouse® для Graphite
    • Получение данных из Managed Service for Apache Kafka® в Managed Service for ClickHouse®
    • Получение данных из Managed Service for Apache Kafka® в ksqlDB
    • Получение данных из RabbitMQ в Managed Service for ClickHouse®
    • Сохранение потока данных Data Streams в Managed Service for ClickHouse®
    • Асинхронная репликация данных из Яндекс Метрика в ClickHouse® с помощью Data Transfer
    • Использование гибридного хранилища в Managed Service for ClickHouse®
    • Шардирование таблиц Managed Service for ClickHouse®
    • Перешардирование данных в кластере Managed Service for ClickHouse®
    • Загрузка данных из Яндекс Директ в витрину Managed Service for ClickHouse® с использованием Cloud Functions, Object Storage и Data Transfer
    • Загрузка данных из Object Storage в Managed Service for ClickHouse® с помощью Data Transfer
    • Миграция данных со сменой хранилища из Managed Service for OpenSearch в Managed Service for ClickHouse® с помощью Data Transfer
    • Загрузка данных из Managed Service for YDB в Managed Service for ClickHouse® с помощью Data Transfer
    • Интеграция Yandex Managed Service for ClickHouse® с Microsoft SQL Server через ClickHouse® JDBC Bridge
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
    • Интеграция Yandex Managed Service for ClickHouse® с Oracle через ClickHouse® JDBC Bridge
    • Настройка Cloud DNS для доступа к кластеру Managed Service for ClickHouse® из других облачных сетей
    • Миграция кластера Yandex Data Processing с HDFS в другую зону доступности
    • Импорт данных из Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Монтирование бакетов Object Storage к файловой системе хостов Yandex Data Processing
    • Работа с топиками Apache Kafka® с помощью Yandex Data Processing
    • Автоматизация работы с Yandex Data Processing с помощью Managed Service for Apache Airflow™
    • Совместная работа с таблицами Yandex Data Processing с использованием Metastore
    • Перенос метаданных между кластерами Yandex Data Processing с помощью Metastore
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Миграция в Managed Service for Elasticsearch с помощью снапшотов
    • Миграция коллекций из стороннего кластера MongoDB в Managed Service for MongoDB
    • Миграция данных в Managed Service for MongoDB
    • Миграция кластера Managed Service for MongoDB с версии 4.4 на 6.0
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция БД из стороннего кластера MySQL® в кластер Managed Service for MySQL®
    • Анализ производительности и оптимизация Managed Service for MySQL®
    • Синхронизация данных из стороннего кластера MySQL® в Managed Service for MySQL® с помощью Data Transfer
    • Миграция БД из Managed Service for MySQL® в сторонний кластер MySQL®
    • Миграция БД из Managed Service for MySQL® в Object Storage с помощью Data Transfer
    • Перенос данных из Object Storage в Managed Service for MySQL® с использованием Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for MySQL® в Managed Service for Apache Kafka® с помощью Debezium
    • Миграция БД из Managed Service for MySQL® в Managed Service for YDB с помощью Data Transfer
    • Захват изменений MySQL® и поставка в YDS
    • Миграция данных из Managed Service for MySQL® в Managed Service for PostgreSQL с помощью Data Transfer
    • Миграция данных из AWS RDS for PostgreSQL в Managed Service for PostgreSQL с помощью Data Transfer
    • Миграция данных из Managed Service for MySQL® в Managed Service for Greenplum® с помощью Data Transfer
    • Настройка политики индексов в Managed Service for OpenSearch
    • Миграция данных из Elasticsearch в Managed Service for OpenSearch
    • Миграция данных в Managed Service for OpenSearch из стороннего кластера OpenSearch с помощью Data Transfer
    • Загрузка данных из Managed Service for OpenSearch в Object Storage с помощью Data Transfer
    • Миграция данных из Managed Service for OpenSearch в Managed Service for YDB с помощью Data Transfer
    • Копирование данных из Managed Service for OpenSearch в Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for OpenSearch с помощью Data Transfer
    • Аутентификация в OpenSearch Dashboards кластера Managed Service for OpenSearch с помощью Keycloak
    • Использование плагина yandex-lemmer в Managed Service for OpenSearch
    • Создание кластера PostgreSQL для «1С:Предприятия»
    • Логическая репликация PostgreSQL
    • Миграция БД из стороннего кластера PostgreSQL в Managed Service for PostgreSQL
    • Миграция БД из Managed Service for PostgreSQL
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Data Transfer
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Managed Service for PostgreSQL в Managed Service for YDB с помощью Data Transfer
    • Миграция БД из Managed Service for PostgreSQL в Object Storage
    • Перенос данных из Object Storage в Managed Service for PostgreSQL с использованием Data Transfer
    • Захват изменений PostgreSQL и поставка в YDS
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for MySQL® с помощью Data Transfer
    • Миграция данных из Managed Service for PostgreSQL в Managed Service for OpenSearch с помощью Data Transfer
    • Решение проблем с сортировкой строк в PostgreSQL после обновления glibc
    • Миграция БД из Greenplum® в ClickHouse®
    • Миграция БД из Greenplum® в PostgreSQL
    • Выгрузка данных Greenplum® в холодное хранилище Object Storage
    • Загрузка данных из Object Storage в Managed Service for Greenplum® с помощью Data Transfer
    • Копирование данных из Managed Service for OpenSearch в Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Создание внешней таблицы на базе таблицы из бакета Object Storage с помощью конфигурационного файла
    • Миграция БД из стороннего кластера Valkey™ в Yandex Managed Service for Valkey™
    • Использование кластера Yandex Managed Service for Valkey™ в качестве хранилища сессий PHP
    • Загрузка данных из Object Storage в Managed Service for YDB с помощью Data Transfer
    • Загрузка данных из Managed Service for YDB в Object Storage с помощью Data Transfer
    • Обработка аудитных логов Audit Trails
    • Обработка логов Cloud Logging
    • Обработка потока изменений Debezium
    • Анализ данных с помощью Jupyter
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Ввод данных в системы хранения
    • Умная обработка логов
    • Передача данных в микросервисных архитектурах
    • Миграция данных в Object Storage с помощью Data Transfer
    • Миграция данных из стороннего кластера Greenplum® или PostgreSQL в Managed Service for Greenplum® с помощью Data Transfer
    • Миграция кластера Managed Service for MongoDB
    • Миграция кластера MySQL®
    • Миграция на сторонний кластер MySQL®
    • Миграция кластера PostgreSQL
    • Создание реестра схем для поставки данных в формате Debezium CDC из Apache Kafka®
    • Автоматизация работы с помощью Yandex Managed Service for Apache Airflow™

В этой статье:

  • Перед началом работы
  • Диагностика дефицита ресурсов
  • Устранение проблем с дефицитом ресурсов
  • Диагностика неэффективного выполнения запросов
  • Устранение проблем с неэффективными запросами
  • Диагностика наличия блокировок (locks)
  • Устранение проблем с блокировками
  • Диагностика недостатка дискового пространства
  • Устранение проблем с дисковым пространством
  1. Построение Data Platform
  2. Анализ производительности и оптимизация MongoDB

Анализ производительности и оптимизация MongoDB

Статья создана
Yandex Cloud
Обновлена 14 марта 2025 г.
  • Перед началом работы
  • Диагностика дефицита ресурсов
  • Устранение проблем с дефицитом ресурсов
  • Диагностика неэффективного выполнения запросов
  • Устранение проблем с неэффективными запросами
  • Диагностика наличия блокировок (locks)
  • Устранение проблем с блокировками
  • Диагностика недостатка дискового пространства
  • Устранение проблем с дисковым пространством

Важно

Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.

В этом руководстве вы узнаете:

  • как использовать инструменты диагностики производительности и мониторинга;
  • как устранять обнаруженные проблемы.

Снижение производительности кластера Managed Service for MongoDB чаще всего происходит по одной из следующих причин:

  • высокая утилизация CPU и дискового I/O,
  • неэффективное выполнение запросов в MongoDB,
  • блокировки,
  • недостаток дискового пространства.

Ниже приводятся советы по диагностике и решению этих проблем.

Перед началом работыПеред началом работы

  1. Установите на внешнем хосте, имеющем сетевой доступ к хосту MongoDB (см. Предварительная настройка для подключения к кластеру MongoDB), утилиты получения данных о производительности MongoDB mongostat и mongotop.
  2. Определите, для каких баз данных нужно выявить проблемы.
  3. Создайте пользователя MongoDB с ролью mdbMonitor для этих баз. Это необходимо для использования утилит mongostat и mongotop.

Диагностика дефицита ресурсовДиагностика дефицита ресурсов

Если какой-то из ресурсов CPU и дискового I/O «вышел на плато» — постоянно росший до этого момента график остановился на одном уровне — скорее всего, соответствующий ресурс стал дефицитным и это привело к падению производительности. Чаще всего это происходит потому, что использование ресурса достигло лимита.

В большинстве случаев высокая утилизация CPU и высокие Disk IO связаны с неоптимальными индексами или большой нагрузкой на хосты.

Начните диагностику с выяснения характера нагрузки и определения проблемных коллекций. Воспользуйтесь встроенными утилитами мониторинга MongoDB. Далее проанализируйте производительность конкретных запросов с помощью логов или данных профилировщика.

Обратите внимание на запросы:

  • Не использующие индексы (planSummary: COLLSCAN). Такие запросы могут увеличивать как потребление I/O (чтений с диска будет больше), так и CPU (данные сжаты по умолчанию, для них требуется декомпрессия). Если необходимый индекс есть, но БД его не использует, можно форсировать использование индекса с помощью hint.
  • С большими значениями параметра docsExamined (количества просканированных документов). Это может означать, что текущие индексы неэффективны или требуются дополнительные.

В момент падения производительности проблему можно диагностировать в реальном времени с помощью списка текущих запросов:

Запросы всех пользователей
Запросы текущего пользователя

Для выполнения таких запросов пользователь должен обладать ролью mdbMonitor.

  • Долгие запросы, например, исполняющиеся более секунды:

    db.currentOp({"active": true, "secs_running": {"$gt": 1}})
    
  • Запросы по созданию индексов:

    db.currentOp({ $or: [{ op: "command", "query.createIndexes": { $exists: true } }, { op: "none", ns: /\.system\.indexes\b/ }] })
    
  • Долгие запросы, например, исполняющиеся более секунды:

    db.currentOp({"$ownOps": true, "active": true, "secs_running": {"$gt": 1}})
    
  • Запросы по созданию индексов:

    db.currentOp({ "$ownOps": true, $or: [{ op: "command", "query.createIndexes": { $exists: true } }, { op: "none", ns: /\.system\.indexes\b/ }] })
    

См. также примеры в документации MongoDB.

Устранение проблем с дефицитом ресурсовУстранение проблем с дефицитом ресурсов

Попробуйте оптимизировать найденные запросы. Если нагрузка все еще высокая или оптимизировать нечего, остается только поднять класс хостов.

Диагностика неэффективного выполнения запросовДиагностика неэффективного выполнения запросов

Чтобы выявить проблемные запросы в MongoDB:

  • Изучите логи. Особое внимание обратите:

    • Для запросов на чтение — на поле responseLength (в логах отображается как reslen).
    • Для запросов на запись — на количество затронутых документов.
      В логах кластера они выводятся в полях nModified, keysInserted, keysDeleted. На странице мониторинга кластера изучите графики Documents affected on primary, Documents affected on secondaries, Documents affected per host.
  • Изучите данные профилировщика. Выведите долго выполняемые запросы (регулируется настройкой СУБД slowOpThreshold).

Устранение проблем с неэффективными запросамиУстранение проблем с неэффективными запросами

Каждый отдельный запрос можно проанализировать с точки зрения его плана (query plan). Подробнее об этом можно прочитать в документации MongoDB:

  • Руководство по анализу запросов.
  • Справка по функции db.collection.explain.

Изучите графики на странице мониторинга кластера:

  • Index size on primary, top 5 indexes,
  • Scan and order per host,
  • Scanned / returned.

Для ускорения выборок используйте индексы.

Важно

Каждый новый индекс замедляет запись. Большое количество индексов может негативно влиять на производительность при записи.

Чтобы оптимизировать запросы на чтение, используйте частичное извлечение (projection). Во многих случаях доставать документ целиком не нужно, достаточно нескольких его полей.

Если не удается ни оптимизировать найденные запросы, ни отказаться от них, поднимите класс хостов.

Диагностика наличия блокировок (locks)Диагностика наличия блокировок (locks)

Причиной низкой производительности запросов могут быть блокировки (locks).

MongoDB не предоставляет подробной информации по блокировкам. В частности, есть только косвенные способы узнать, чем заблокирован конкретный запрос:

  • Обратите внимание на большие или растущие значения db.serverStatus().metrics.operation.writeConflicts — они могут говорить о высоком write contention на каких-то документах.

  • Изучите большие или растущие значения на графике Write conflicts per hosts на странице мониторинга кластера.

  • В момент падения производительности внимательно изучите список текущих запросов:

    Запросы всех пользователей
    Запросы текущего пользователя

    Для выполнения таких запросов пользователю необходима роль mdbMonitor.

    • Найдите запросы, которые удерживают эксклюзивные блокировки, например:

      db.currentOp({'$or': [{'locks.Global': 'W'}, {'locks.Database': 'W'}, {'locks.Collection': 'W'} ]}).inprog
      
    • Найдите запросы, ожидающие блокировок (в поле timeAcquiringMicros будет видно время ожидания):

      db.currentOp({'waitingForLock': true}).inprog
      db.currentOp({'waitingForLock': true, 'secs_running' : { '$gt' : 1 }}).inprog
      
    • Найдите запросы, которые удерживают эксклюзивные блокировки, например:

      db.currentOp({"$ownOps": true, '$or': [{'locks.Global': 'W'}, {'locks.Database': 'W'}, {'locks.Collection': 'W'} ]}).inprog
      
    • Найдите запросы, ожидающие блокировок (в поле timeAcquiringMicros будет видно время ожидания):

      db.currentOp({"$ownOps": true, 'waitingForLock': true}).inprog
      db.currentOp({"$ownOps": true, 'waitingForLock': true, 'secs_running' : { '$gt' : 1 }}).inprog
      
  • В логах и профилировщике обратите внимание на следующее:

    • запросы, долго ожидавшие получения блокировок, будут иметь большие значения timeAcquiringMicros;
    • запросы, которые конкурировали за одни и те же документы, будут иметь большие значения writeConflicts.

Обратитесь к официальной документации MongoDB за информацией о том, какие блокировки выполняют стандартные клиентские и административные запросы.

Устранение проблем с блокировкамиУстранение проблем с блокировками

Найденные блокировки указывают на неоптимизированные запросы. Попробуйте оптимизировать проблемные запросы.

Диагностика недостатка дискового пространстваДиагностика недостатка дискового пространства

Если кластер демонстрирует низкую производительность в сочетании с малым объемом свободного дискового пространства, возможно, для одного или нескольких хостов кластера активировался режим только чтение.

Объем занятого пространства в хранилище отображается на странице мониторинга кластера на графиках Disk space usage per host, top 5 hosts.

Чтобы отслеживать степень заполнения хранилища на хостах кластера, настройте алерт.

Устранение проблем с дисковым пространствомУстранение проблем с дисковым пространством

Рекомендации по устранению проблем приведены в разделе Поддержка работоспособности кластера.

Была ли статья полезна?

Предыдущая
Шардирование коллекций MongoDB
Следующая
Миграция БД из стороннего кластера MySQL® в кластер Managed Service for MySQL®
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»