Gyakori problémák elhárítása a MongoDB-hez készült Azure Cosmos DB API-ban

A KÖVETKEZŐKRE VONATKOZIK: MongoDB

Az alábbi cikk az Azure Cosmos DB for MongoDB használatával történő üzembe helyezés gyakori hibáit és megoldásait ismerteti.

Feljegyzés

Az Azure Cosmos DB nem üzemelteti a MongoDB motort. A MongoDB wire protocol 4.0-s, 3.6-os és örökölt támogatását biztosítja a 3.2-es vezetékes protokollhoz. Ezért ezen hibák némelyike csak az Azure Cosmos DB MongoDB-hez készült API-jában található.

Gyakori hibák és megoldások

Kód Hiba Leírás Megoldás
2 BadValue Az egyik gyakori ok az, hogy a megadott rendelésenkénti elemnek megfelelő index elérési útja ki van zárva, vagy a lekérdezés szerinti sorrend nem rendelkezik a megfelelő összetett indexel, amelyből kézbesíthető. A lekérdezés rendezést kér egy olyan mezőhöz, amely nem indexelt. Hozzon létre egy egyeztetési indexet (vagy összetett indexet) a futtatni próbált rendezett lekérdezéshez.
2 A tranzakció nem aktív A többdokumentumos tranzakció túllépte a rögzített 5 másodperces időkorlátot. Próbálkozzon újra a többdokumentumos tranzakcióval, vagy korlátozza a többdokumentumos tranzakció során végrehajtott műveletek hatókörét annak érdekében, hogy a tranzakció befejeződjön az 5 másodperces időkorláton belül.
9 FailedToParse Azt jelzi, hogy a Cosmos DB-kiszolgáló nem tudta értelmezni vagy feldolgozni egy paramétert, mert a megadott bemenet nem felelt meg a várt vagy támogatott formátumnak. Győződjön meg arról, hogy csak érvényes és támogatott paraméterek szerepelnek a lekérdezésekben.
13 Nem engedélyezett A kérelem nem rendelkezik a végrehajtáshoz szükséges engedélyekkel. Győződjön meg arról, hogy a megfelelő kulcsokat használja.
26 NamespaceNotFound A lekérdezésben hivatkozott adatbázis vagy gyűjtemény nem található. Győződjön meg arról, hogy az adatbázis vagy a gyűjtemény neve pontosan megegyezik a lekérdezésben szereplő névvel.
50 ExceededTimeLimit A kérés túllépte a 60 másodperces végrehajtási időkorlátot. Ennek a hibának számos oka lehet. Ennek egyik oka az, hogy a jelenleg lefoglalt kérelemegység-kapacitás nem elegendő a kérés teljesítéséhez. Erre az adott gyűjtemény vagy adatbázis kérelemegységeinek növelése nyújthat megoldást. Egyéb esetekben ez a hiba a nagy méretű kérelmek kisebbekre bontásával kerülhető meg. Az ezt a hibát kiváltó írási művelet újrapróbálása ismételt írást eredményezhet.

Ha nagy mennyiségű adatot próbál törölni anélkül, hogy hatással lenne a kérelemegységekre:
– Fontolja meg az (időbélyeg-alapú) TTL használatát: Adatok lejárttá tétele a MongoDB-hez készült Azure Cosmos DB API-val
– A törléshez használja a kurzor-/kötegméret beállítását. Egyesével hívhatja le a dokumentumokat, és egy-egy ciklusban törölheti azokat. Ez segít az adatok lassú törlésének végrehajtásában, az éles alkalmazás befolyásolása nélkül.
61 ShardKeyNotFound A kérelemben szereplő dokumentum nem tartalmazta a gyűjtemény szegmenskulcsát (az Azure Cosmos DB-partíciókulcsot). Gondoskodjon arról, hogy a gyűjtemény szegmenskulcsa szerepeljen a kérelemben.
66 ImmutableField A kérelem egy nem módosítható mezőt próbál meg módosítani A "_id" mezők nem módosíthatók. Győződjön meg arról, hogy a kérés nem próbálja frissíteni a mezőt vagy a szegmenskulcs mezőt.
67 CannotCreateIndex Az index létrehozására irányuló kérelmet nem lehet végrehajtani. Legfeljebb 500 egymezős index hozható létre egy tárolóban. Egy összetett indexben legfeljebb nyolc mező szerepelhet (az összetett indexek támogatása a 3.6-os verziótól kezdve érhető el).
112 WriteConflict A többdokumentumos tranzakció meghiúsult egy vele ütköző többdokumentumos tranzakció miatt Próbálkozzon újra a többdokumentumos tranzakcióval, amíg sikerrel nem jár.
115 CommandNotSupported A megkísérelt kérelem nem támogatott. A hibában további részleteket is meg kell adni. Ha ez a funkció fontos az üzemelő példányok számára, hozzon létre egy támogatási jegyet az Azure Portalon, és az Azure Cosmos DB csapata visszatér Önhöz.
11000 DuplicateKey A beszúrt dokumentum szegmenskulcsa (Azure Cosmos DB-partíciókulcsa) már megtalálható a gyűjteményben, vagy meg lett sértve egy indexmezőre vonatkozó egyéni korlátozás. A meglévő dokumentumokat az update() függvénnyel frissítheti. Ha megsértették az egyedi indexmező-korlátozást, szúrja be vagy frissítse a dokumentumot olyan mezőértékkel, amely még nem létezik a szegmensben/partícióban. Egy másik lehetőség az azonosító és a szegmenskulcs mezőinek kombinációját tartalmazó mező használata.
16500 TooManyRequests A felhasznált kérelemegységek teljes száma nagyobb, mint a gyűjteményhez kiosztott kérelemegységek száma, ezért szabályozva lett. Érdemes lehet skálázni az adott tárolóhoz vagy tárolókészlethez megadott átviteli sebességet az Azure portálon, vagy újból elvégezni a műveletet. Ha engedélyezi az SSR-t (kiszolgálóoldali újrapróbálkozás), az Azure Cosmos DB automatikusan újrapróbálkozza azokat a kéréseket, amelyek a hiba miatt meghiúsulnak.
16501 ExceededMemoryLimit Egy több-bérlős szolgáltatás esetében a művelet túllépte az ügyfél által lekötött memóriamennyiséget. Ez csak a MongoDB 3.2-es verziójához készült Azure Cosmos DB-hez vonatkozik. Csökkentse a művelet hatókörét jobban korlátozó lekérdezési feltételekkel, vagy az Azure Portalon lépjen kapcsolatba az ügyfélszolgálattal. Például: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 A folyamatszakasz neve nem ismerhető fel. Az összesített folyamatkérelemben lévő szakasznév nem ismerhető fel. Győződjön meg arról, hogy minden összesített folyamatnév érvényes a kérelemben.
- A MongoDB vonalprotokoll-verziójával kapcsolatos problémák A MongoDB-illesztőprogramok régebbi verziói nem képesek észlelni az Azure Cosmos DB-fiók nevét a kapcsolati sztringekben. Fűzze hozzá appName=@accountName@ a kapcsolati sztring végén, ahol accountName az Azure Cosmos DB-fiók neve szerepel.
- A MongoDB-ügyfél hálózati problémái (például szoftvercsatorna- vagy endOfStream-kivételek) A hálózati kérelem sikertelen volt. Ezt gyakran egy inaktív TCP-kapcsolat okozza, amelyet a MongoDB-ügyfél használni próbál. A MongoDB-illesztők gyakran kapcsolatkészletezést használnak, amelynek eredménye a kérelemhez használt készletből választott, véletlenszerű kapcsolat. Az inaktív kapcsolatok általában négy perc után túllépik az időkorlátot az Azure Cosmos DB oldalán. Újrapróbálkozhat a sikertelen kérelmekkel az alkalmazás kódjában, módosíthatja a MongoDB-ügyfél (illesztő) beállításait, amellyel a négyperces időtúllépési keret lejárta előtt leállíthatja az inaktív TCP-kapcsolatokat, vagy konfigurálhatja az operációs rendszer keepalive beállításait, amellyel aktív állapotban tarthatja a TCP-kapcsolatokat.

A kapcsolati üzenetek elkerüléséhez érdemes úgy módosítani a kapcsolati sztringet, hogy a maxConnectionIdleTime értékét 1–2 percre állítja.
– Mongo-illesztő: konfigurálja a maxIdleTimeMS=120000 értéket
– Node.JS: konfigurálja a socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 perc értékeket
- A Mongo-felület nem működik az Azure Portalon Amikor a felhasználó megpróbál megnyitni egy Mongo-felületet, semmi sem történik, és a lap üres marad. Ellenőrizze a tűzfalat. Az Azure Portalon a tűzfal nem használható a Mongo-felülettel.
- Telepítse a Mongo shellt a helyi számítógépre a tűzfalszabályokon belül
– Használja az örökölt Mongo-felületet
- Nem lehet csatlakozni a kapcsolati sztringgel A kapcsolati sztring a 3.2-3.6-os> verzióra való frissítéskor módosult Ha az Azure Cosmos DB API-ját mongoDB-fiókokhoz használja, a fiókok 3.6-os verziója a végpontot a formátumban *.mongo.cosmos.azure.com , míg a 3.2-es verziójú fiókok végpontja a formátumot *.documents.azure.comhasználja.

Következő lépések

  • Megtudhatja, hogyan használhatja a Studio 3T-t az Azure Cosmos DB MongoDB-hez készült API-jával.
  • Megtudhatja, hogyan használhatja a Robo 3T-t az Azure Cosmos DB MongoDB-hez készült API-jával.
  • Megismerheti a MongoDB-mintákat az Azure Cosmos DB MongoDB-hez készült API-jával.