Это может быть из-за следующие сценарии,
1..Throughput связанного диск IO
можно посмотреть в следующих показателей с помощью «mongostat» и «Service Management MongoDB»:
- Среднее время промывки (как долго периодическая синхронизация MongoDB на диск принимая)
- IOStats на вкладке оборудования (смотрите в частности IOWait)
Поскольку диск IO медленнее, чем время обработки CPU, все вставки будут поставлены в очередь, и это может продолжаться в течение длительного периода времени, можно проверить статус сервера, используя db.serverStatus(), и посмотрите в поле «globalLock» (как запись получает глобальную блокировку) для «currrentQueue», связанного с блокировкой, чтобы увидеть количество писателей в очереди.
2..Another Возможной причиной может быть управляемой Sharded Cluster балансир был поставлен в О статусе (который по умолчанию)
Если вы работали в кластерной среде, когда операция записи начинается Балансер автоматически включается, чтобы сохранить кластер в сбалансированном состоянии, что может продолжать перемещать куски с одного осколка на другой даже после завершения ваших сценариев. В таком случае я предпочел бы оставить балансир выключенным, имея навальную нагрузку, в таком случае все ваши документы попадают в одинарный осколок, но балансировку можно пнуть при любом простоях.
3..Write Концерн Это может также способствовать проблемы немного, если они установлены на Replica Признанный или режим Признанный, это зависит от вас, на основе вашего типа данных, чтобы решить эти проблемы ,
Использует ли ваш скрипт непризнанные записи при вставке? Если это так, фактические вставки могут иметь место после завершения вашего скрипта. – JohnnyHK
Используйте db.currentOp(), чтобы проверить, что работает. Небезопасный режим записи может привести к этому условию. –