A kérelmezési költségek optimalizálása az Azure Cosmos DB-ben
A KÖVETKEZŐKRE VONATKOZIK: Nosql MongoDB Cassandra Gremlin Táblázat
Ez a cikk azt ismerteti, hogyan fordítják le az olvasási és írási kérelmeket kérelemegységekké , és hogyan optimalizálható ezeknek a kéréseknek a költsége. Az olvasási műveletek pontolvasásokat és lekérdezéseket tartalmaznak. Az írási műveletek közé tartozik az elemek beszúrása, cseréje, törlése és beillesztése.
Az Azure Cosmos DB számos adatbázis-műveletet kínál, amelyek a tároló elemein működnek. Az egyes ilyen műveletekhez kapcsolódó költségek a művelet végrehajtásához szükséges CPU, IO és memória függvényében változnak. A hardveres erőforrások átgondolása és kezelése helyett a kérelemegységet (RU) egyetlen mértékként tekintheti a különböző adatbázis-műveletek végrehajtásához szükséges erőforrásokra a kérések kiszolgálásához.
Kérelem kérelemegység-díjának mérése
Fontos a kérések kérelemegység-díjának mérése a tényleges költségek megértéséhez és az optimalizálások hatékonyságának értékeléséhez. Ezt a költséget a Azure Portal vagy az Azure Cosmos DB-ből az egyik SDK-on keresztül visszaküldött válasz vizsgálatával lehet lekérni. Ennek elérésére vonatkozó részletes útmutatásért tekintse meg a kérelemegység díjának megkeresését az Azure Cosmos DB-ben .
Adatok olvasása: pontolvasások és lekérdezések
Az Azure Cosmos DB olvasási műveletei általában a leggyorsabb/leghatékonyabbtól a lassabb/kevésbé hatékonyig vannak rendezve a kérelemegység-használat szempontjából az alábbiak szerint:
- Pontolvasások (kulcs/érték keresése egyetlen elemazonosítón és partíciókulcson).
- Lekérdezés egy szűrőfeltétellel egyetlen partíciókulcson belül.
- Lekérdezés egyenlőség vagy tartományszűrő záradék nélkül bármely tulajdonságon.
- Lekérdezés szűrők nélkül.
A konzisztenciaszint szerepe
Ha az erős vagy a korlátozott elavultságikonzisztenciaszinteket használja, az olvasási műveletek (pontolvasás vagy lekérdezés) kérelemegység-költsége megduplázódik.
Pontolvasások
A pontolvasás ru-díját befolyásoló egyetlen tényező (a konzisztenciaszinten kívül) a lekért elem mérete. Az alábbi táblázat az 1 KB és 100 KB méretű elemek pontolvasási kérelemegység-költségeit mutatja be.
Elem mérete | Egy pont olvasási költsége |
---|---|
1 KB | 1 RU |
100 KB | 10 RU |
Mivel a pontolvasások (az elemazonosítón és a partíciókulcson végzett kulcs-/értékkeresések) a leghatékonyabb olvasási mód, győződjön meg arról, hogy az elemazonosító értelmes értékkel rendelkezik, így lehetőség szerint pontolvasással (lekérdezés helyett) lekérheti az elemeket.
Megjegyzés
A NoSQL-hez készült API-ban a pontolvasások csak REST API vagy SDK használatával végezhetők el. Azok a lekérdezések, amelyek egy elem azonosítójára és partíciókulcsára szűrnek, nem minősülnek pontolvasási pontnak. A .NET SDK-t használó példa megtekintéséhez tekintse meg az Azure Cosmos DB for NoSQL egy elemének olvasását ismertető cikket.
Lekérdezések
A lekérdezések kérelemegységei számos tényezőtől függnek. Például a betöltött/visszaadott Azure Cosmos DB-elemek száma, az indexen végrehajtott keresések száma, a lekérdezés fordítási ideje stb. Részletek. Az Azure Cosmos DB garantálja, hogy ugyanazon lekérdezés ugyanazon adatokon való végrehajtásakor mindig ugyanannyi kérelemegységet fog használni, még ismétlődő végrehajtások esetén is. A lekérdezés-végrehajtási metrikákat használó lekérdezésprofil jó képet ad a kérelemegységek felhasználásáról.
Bizonyos esetekben 200 és 429 válaszból és változó kérelemegységből álló sorozat jelenhet meg a lekérdezések lapozott végrehajtásában, ennek az az oka, hogy a lekérdezések a lehető leggyorsabban futnak az elérhető kérelemegységek alapján. Előfordulhat, hogy a lekérdezés-végrehajtás több oldalra vagy a kiszolgáló és az ügyfél közötti váltásokra tör. Például 10 000 elemet lehet több oldalként visszaadni, amelyek mindegyike az adott lapra vonatkozó számítás alapján kerül felszámításra. Ha ezeket az oldalakat összegzi, ugyanannyi kérelemegységet kell kapnia, mint a teljes lekérdezéshez.
Metrikák a lekérdezések hibaelhárításához
A lekérdezések által felhasznált teljesítmény és átviteli sebesség (beleértve a felhasználó által definiált függvényeket) többnyire a függvény törzsétől függ. A lekérdezési metrikák engedélyezésével a legegyszerűbben úgy állapíthatja meg, hogy mennyi időt tölt a lekérdezés végrehajtása az UDF-ben és a felhasznált kérelemegységek számával. Ha a .NET SDK-t használja, az alábbi mintalekérdezés-metrikákat adja vissza az SDK:
Retrieved Document Count : 1
Retrieved Document Size : 9,963 bytes
Output Document Count : 1
Output Document Size : 10,012 bytes
Index Utilization : 100.00 %
Total Query Execution Time : 0.48 milliseconds
Query Preparation Times
Query Compilation Time : 0.07 milliseconds
Logical Plan Build Time : 0.03 milliseconds
Physical Plan Build Time : 0.05 milliseconds
Query Optimization Time : 0.00 milliseconds
Index Lookup Time : 0.06 milliseconds
Document Load Time : 0.03 milliseconds
Runtime Execution Times
Query Engine Execution Time : 0.03 milliseconds
System Function Execution Time : 0.00 milliseconds
User-defined Function Execution Time : 0.00 milliseconds
Document Write Time : 0.00 milliseconds
Client Side Metrics
Retry Count : 1
Request Charge : 3.19 RUs
Ajánlott eljárások a költségoptimalizált lekérdezésekhez
A lekérdezések költségoptimalizálásához vegye figyelembe az alábbi ajánlott eljárásokat:
Több entitástípus közös elhelyezése
Próbáljon meg több entitástípust együtttelepíteni egyetlen vagy kisebb számú tárolóban. Ez a módszer nemcsak a díjszabás szempontjából előnyös, hanem a lekérdezések végrehajtásához és a tranzakciókhoz is. A lekérdezések hatóköre egyetlen tárolóra terjed ki; és több rekordon tárolt eljárásokon/eseményindítókon keresztül végrehajtott atomi tranzakciók egyetlen tárolón belüli partíciókulcsra terjednek ki. Ha az entitásokat ugyanabban a tárolóban helyezi el, azzal csökkentheti a hálózati adatváltások számát a rekordok közötti kapcsolatok feloldása érdekében. Így növeli a végpontok közötti teljesítményt, lehetővé teszi az atomi tranzakciókat több rekordon egy nagyobb adathalmaz esetében, és ezáltal csökkenti a költségeket. Ha több entitástípust helyez el egyetlen vagy kisebb számú tárolóban, az általában azért van nehéz, mert egy meglévő alkalmazást migrál, és nem szeretne kódmódosításokat végrehajtani – érdemes megfontolnia az átviteli sebesség adatbázisszinten történő kiépítését.
Kisebb kérelemegységek/másodperces használat mérése és finomhangolása
A lekérdezések összetettsége hatással van arra, hogy egy művelet hány kérelemegységet (RU-t) használ fel. A predikátumok száma, a predikátumok jellege, az UDF-ek száma és a forrásadatkészlet mérete. Mindezek a tényezők befolyásolják a lekérdezési műveletek költségeit.
Az Azure Cosmos DB kiszámítható teljesítményt biztosít az átviteli sebesség és a késés szempontjából egy kiépített átvitelisebesség-modell használatával. A kiosztott átviteli sebesség másodpercenkénti kérelemegységekben vagy RU/s-ben jelenik meg. A kérelemegység (RU) logikai absztrakció a számítási erőforrások, például a CPU, a memória, az I/O stb. felett. a kérés végrehajtásához szükséges. A kiosztott átviteli sebességet (RU-kat) a rendszer elkülöníti, és a tároló vagy az adatbázis számára dedikáltan biztosítja a kiszámítható átviteli sebességet és késést. A kiosztott átviteli sebesség lehetővé teszi, hogy az Azure Cosmos DB kiszámítható és konzisztens teljesítményt, garantált alacsony késést és magas rendelkezésre állást biztosítson bármilyen léptékben. A kérelemegységek a normalizált pénznemet jelölik, amely leegyszerűsíti az alkalmazás által igényelt erőforrások számát.
A kérelem fejlécében visszaadott kérelemdíj egy adott lekérdezés költségét jelzi. Ha például egy lekérdezés 1000 1 KB-os elemet ad vissza, a művelet költsége 1000. Így egy másodpercen belül a kiszolgáló csak két ilyen kérést tart tiszteletben, mielőtt a sebesség korlátozná a későbbi kéréseket. További információkért lásd a kérelemegységek cikkét és a kérelemegység-kalkulátort.
Adatok írása
Az elem írásának kérelemegység-költsége a következőtől függ:
- Az elem mérete.
- Az indexelési szabályzat hatálya alá tartozó és indexelendő tulajdonságok száma.
1 KB-os elem beszúrása körülbelül 5,5 kérelemegység körüli indexelés nélkül. Egy cikk cseréje kétszer annyiba kerül, mint az ugyanazon cikk beszúrásához szükséges díj.
Írások optimalizálása
Az írási műveletek kérelemegység-költségének optimalizálásának legjobb módja az elemek és az indexelt tulajdonságok számának jogosultsága.
- Ha nagyon nagy elemeket tárol az Azure Cosmos DB-ben, az magas kérelemegység-díjakat eredményez, és mintának tekinthető. Különösen ne tároljon bináris tartalmat vagy nagy méretű szövegrészeket, amelyekről nem kell lekérdezést elvégeznie. Az ajánlott eljárás az ilyen típusú adatok elhelyezése Azure Blob Storage, és az Azure Cosmos DB-be írt elem blobjára mutató hivatkozás (vagy hivatkozás) tárolása.
- Ha úgy optimalizálja az indexelési szabályzatot, hogy csak azokat a tulajdonságokat indexelje, amelyekre a lekérdezések szűrnek, jelentős különbséget tehet az írási műveletek által felhasznált kérelemegységekben. Új tároló létrehozásakor az alapértelmezett indexelési szabályzat az elemekben található minden tulajdonságot indexel. Bár ez egy jó alapértelmezett fejlesztési tevékenység, erősen ajánlott újraértékelődni és testre szabni az indexelési szabályzatot , amikor éles üzemre készül, vagy amikor a számítási feladat jelentős forgalmat kezd kapni.
Az adatok tömeges betöltésekor javasoljuk az Azure Cosmos DB tömeges végrehajtói kódtár használatát is, mivel az ilyen műveletek kérelemegység-felhasználásának optimalizálására lett tervezve. Igény szerint használhat Azure Data Factory is, amely ugyanarra a kódtárra épül.
Következő lépések
A következő cikkekből többet is megtudhat a költségoptimalizálásról az Azure Cosmos DB-ben:
- További információ a fejlesztésre és tesztelésre való optimalizálásról
- További információ az Azure Cosmos DB-számla értelmezéséről
- További információ az átviteli sebesség költségeinek optimalizálásáról
- További információ a tárolási költségek optimalizálásáról
- További információ a többrégiós Azure Cosmos DB-fiókok költségeinek optimalizálásáról
- További információ a fenntartott Azure Cosmos DB-kapacitásról
- Kapacitástervezést szeretne végezni az Azure Cosmos DB-be való migráláshoz? A kapacitástervezéshez használhatja a meglévő adatbázisfürtre vonatkozó információkat.
- Ha csak a meglévő adatbázisfürtben lévő virtuális magok és kiszolgálók számát ismeri, olvassa el a kérelemegységek virtuális magok vagy vCPU-k használatával történő becslését ismertető cikket.
- Ha ismeri az aktuális adatbázis számítási feladatának jellemző kérési arányait, olvassa el a kérelemegységek becslését az Azure Cosmos DB Capacity Planner használatával