Устранение распространенных проблем в API Azure Cosmos DB для MongoDB

Область применения: Mongodb

В следующей статье описываются распространенные ошибки и решения для развертываний с помощью Azure Cosmos DB для MongoDB.

Примечание.

Ядро MongoDB не размещается в Azure Cosmos DB. Эта служба предоставляет реализацию протокола коммутации версии 4.0, 3.6 и поддержку старой версии протокола коммутации 3.2. Поэтому некоторые из этих ошибок возникают только в API Azure Cosmos DB для MongoDB.

Распространенные ошибки и способы их устранения

Код Ошибка Описание Решение
2 BadValue Одна из распространенных причин заключается в том, что путь индекса, соответствующий указанному элементу порядка, исключается или порядок по запросу не имеет соответствующего составного индекса, из которых его можно обслуживать. Запрос запрашивает сортировку в поле, которое не индексируется. Создайте совпадающий индекс (или составной индекс) для предпринятого запроса сортировки.
2 Транзакция не активна Транзакция с несколькими документами превысила фиксированный 5-секундный лимит времени. Повторите транзакцию с несколькими документами или ограничьте область операций в рамках транзакции с несколькими документами, чтобы она завершалась в течение 5 секунд.
9 FailedToParse Указывает, что сервер Cosmos DB не смог интерпретировать или обрабатывать параметр, так как предоставленные входные данные не соответствуют ожидаемому или поддерживаемму формату. Убедитесь, что в запросы включены только допустимые и поддерживаемые параметры.
13 Не авторизовано В запросе отсутствуют разрешения на завершение. Убедитесь, что используется правильный ключ.
26 NamespaceNotFound Не удается найти базу данных или коллекцию, на которую указывает ссылка в запросе. Убедитесь, что имя базы данных или коллекции полностью совпадает с именем в запросе.
50 ExceededTimeLimit Время запроса превысило время ожидания выполнения на 60 с. Причин сбоя может быть несколько. Одна из причин заключается в том, что для завершения запроса недостаточно емкости единиц запросов. Эту проблему можно устранить, увеличив единицы запроса этой коллекции или базы данных. В других случаях эту ошибку можно обойти, разделив большой запрос на более мелкие. Повторная попытка операции записи, при которой произошла эта ошибка, может привести к дублированию записи.

Если вы пытаетесь удалить большие объемы данных без влияния на ЕЗ:
— Попробуйте использовать параметр TTL (срок жизни по метке времени): Завершение срока действия данных с помощью API Azure Cosmos DB для MongoDB
— Используйте для удаления размер курсора (пакета). Вы можете извлекать и удалять по одному документу за цикл. Это позволит медленно удалять данные без ухудшения производительности рабочего приложения.
61 ShardKeyNotFound Документ в запросе не содержал ключ сегмента коллекции (ключ секции Azure Cosmos DB). Убедитесь, что в запросе используется ключ сегмента коллекции.
66 ImmutableField Запрос пытается изменить неизменяемое поле. Поля "_id" являются неизменяемыми. Убедитесь, что запрос не пытается обновить это поле или поле ключа сегмента.
67 CannotCreateIndex Не удается выполнить запрос на создание индекса. В контейнере можно создать до 500 индексов с одним полем. В составной индекс можно добавить до восьми полей (составные индексы поддерживаются в версии 3.6 и более новой).
112 WriteConflict Сбой транзакции с несколькими документами их-за конфликтующей транзакции с несколькими документами Повторите транзакцию с несколькими документами, пока она не будет успешно выполнена.
115 CommandNotSupported Отправленный запрос не поддерживается. Другие сведения должны быть указаны в ошибке. Если эта функция важна для развертываний, создайте запрос в службу поддержки в портал Azure, а команда Azure Cosmos DB вернется к вам.
11000 DuplicateKey Ключ сегмента (ключ секции Azure Cosmos DB) вставляемого документа уже существует в коллекции или нарушено ограничение уникальности индексов полей. Используйте функцию update() для обновления имеющегося документа. Если ограничение поля уникального индекса было нарушено, вставьте или обновите документ со значением поля, которое еще не существует в сегменте или секции. Другой вариант — использовать поле, содержащее сочетание полей идентификатора и ключа сегментов.
16500 TooManyRequests Общее число использованных единиц запроса превысило число, подготовленное для коллекции, и было отрегулировано. Рекомендуем масштабировать пропускную способность, назначенную контейнеру или набору контейнеров на портале Azure, или можно выполнить операцию еще раз. Если вы включите SSR (визуализацию на стороне сервера), Azure Cosmos DB автоматически попробует отправить запросы, которые не были выполнены из-за этой ошибки.
16501 ExceededMemoryLimit Так как в этой службе несколько клиентов, операция превысила выделенную память для клиента. Это применимо только к Azure Cosmos DB для MongoDB версии 3.2. Уменьшите область операции, применив более строгие критерии запроса, или обратитесь в службу поддержки на портале Azure. Пример: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Нераспознанное имя этапа конвейера. Имя этапа в запросе конвейера агрегирования не распознано. Убедитесь, что в запросе все имена конвейеров агрегирования являются допустимыми.
- Проблемы с версией протокола в MongoDB Более старые версии драйверов MongoDB не могут обнаружить имя учетной записи Azure Cosmos DB в строках подключения. Добавьте appName=@accountName@ в конце строки подключения, где accountName — это имя учетной записи Azure Cosmos DB.
- Сетевые проблемы на клиенте MongoDB (например, исключения сокетов или endOfStream) Сбой при выполнении сетевого запроса. Зачастую это является следствием того, что клиент MongoDB пытается использовать неактивное подключение TCP. Драйверы MongoDB часто используют пулы соединений, что приводит к использованию для запроса произвольного соединения, выбранного из пула. Время ожидания неактивных соединений в Azure Cosmos DB обычно истекает через четыре минуты. Вы можете повторить эти завершившиеся сбоем запросы в коде приложения, изменить параметры клиента (драйвера) MongoDB для удаления неактивных TCP-соединений до истечения времени ожидания (4 минуты) или настроить параметры keepalive операционной системы, чтобы обеспечить поддержку TCP-соединений в активном состоянии.

Чтобы не получать сообщения о подключении, вы можете изменить строку подключения, установив для параметра maxConnectionIdleTime значение 1–2 мин.
— Драйвер Mongo: настройте maxIdleTimeMS=120000
— Node.JS: настройте socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 минуты
- Оболочка Mongo не работает на портал Azure Когда пользователь пытается открыть оболочку Mongo, ничего не происходит, а вкладка просто остается пустой. Проверьте брандмауэр. Брандмауэр не поддерживается в оболочке Mongo на портале Azure.
— Установка оболочки Mongo на локальном компьютере в правилах брандмауэра
— Используйте прежнюю версию оболочки Mongo.
- Не удается подключиться с помощью строки подключения Строка подключения изменилась при обновлении версии 3.2 до версии 3.6 или более поздних. При использовании API Azure Cosmos DB для учетных записей MongoDB версия учетных записей 3.6 имеет конечную точку в формате *.mongo.cosmos.azure.com , а версия учетных записей 3.2 имеет конечную точку в формате *.documents.azure.com.

Следующие шаги