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.com haszná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.