Azure Stream Analytics-feladat skálázása az átviteli sebesség növeléséhez
Ez a cikk bemutatja, hogyan hangolhat stream analytics-lekérdezéseket a Stream Analytics-feladatok átviteli sebességének növelése érdekében. Az alábbi útmutató segítségével skálázhatja a feladatot a nagyobb terhelés kezelésére, és kihasználhatja a rendszererőforrások (például nagyobb sávszélesség, több CPU-erőforrás, több memória) előnyeit. Előfeltételként előfordulhat, hogy el kell olvasnia a következő cikkeket:
1. eset – A lekérdezés eredendően teljes mértékben párhuzamosítható a bemeneti partíciók között
Ha a lekérdezés eredendően teljes mértékben párhuzamosítható a bemeneti partíciók között, kövesse az alábbi lépéseket:
- Hozza létre a lekérdezést, hogy kínosan párhuzamos legyen a PARTITION BY kulcsszóval. További részleteket a lap kínosan párhuzamos feladatok szakaszában talál.
- A lekérdezésben használt kimeneti típusoktól függően előfordulhat, hogy egyes kimenetek nem párhuzamosíthatók, vagy további konfigurációra van szükség ahhoz, hogy zavaróan párhuzamos legyen. A PowerBI-kimenet például nem párhuzamosítható. A kimenetek mindig egyesítve lesznek, mielőtt elküldené a kimeneti fogadónak. A blobok, táblák, ADLS, Service Bus és Azure-függvények automatikusan párhuzamosak. Az SQL- és az Azure Synapse Analytics-kimenetek párhuzamosítási lehetőséget is választhatnak. Az eseményközpontnak be kell állítania a PartitionKey konfigurációt, hogy megfeleljen a PARTITION BY mezőnek (általában PartitionId). Az Event Hub esetében is ügyeljen arra, hogy az összes bemenet és kimenet partícióinak száma egyezzen a partíciók számával, hogy elkerülje a partíciók közötti keresztátvételt.
- Futtassa a lekérdezést 6 SU-val (amely egy számítási csomópont teljes kapacitása) a maximális elérhető átviteli sebesség méréséhez, és ha a GROUP BY-t használja, mérje meg, hogy a feladat hány csoportot (számosságot) képes kezelni. A rendszererőforrás-korlátokat elérő feladat általános tünetei a következők.
- Az SU %-os kihasználtsági metrika több mint 80%. Ez azt jelzi, hogy a memóriahasználat magas. A metrika növekedéséhez hozzájáruló tényezőket itt ismertetjük.
- A kimeneti időbélyeg a falióra időéhez képest elmarad. A lekérdezési logikától függően a kimeneti időbélyegnek a falióra-időtől eltérő logikai eltolása lehet. Ugyanakkor nagyjából ugyanolyan ütemben kell haladniuk. Ha a kimeneti időbélyeg tovább csökken, az azt jelzi, hogy a rendszer túldolgozott. Ez lehet az alsóbb rétegbeli kimeneti fogadó szabályozása vagy a magas CPU-kihasználtság eredménye. Jelenleg nem biztosítunk CPU-kihasználtsági metrikát, így nehéz lehet megkülönböztetni a kettőt.
- Ha a problémát fogadószabályozás okozza, előfordulhat, hogy növelnie kell a kimeneti partíciók számát (és a bemeneti partíciókat is, hogy a feladat teljes mértékben párhuzamosítható maradjon), vagy növelnie kell a fogadó erőforrásainak mennyiségét (például a CosmosDB kérelemegységeinek számát).
- A feladatábrában minden bemenethez tartozik egy partíciónkénti teendőlista-eseménymetrika. Ha a hátralékesemény metrikája folyamatosan növekszik, az azt is jelzi, hogy a rendszererőforrás korlátozott (a kimeneti fogadó szabályozása vagy a magas cpu-használat miatt).
- Miután meghatározta, hogy milyen korlátokat érhet el egy 6 SU-feladat, lineárisan extrapolálhatja a feladat feldolgozási kapacitását további termékváltozatok hozzáadásakor, feltéve, hogy nincs olyan adateltérés, amely bizonyos partíciókat "gyakori elérésűvé" tesz.
Megjegyzés
Válassza ki a megfelelő számú streamelési egységet: Mivel a Stream Analytics létrehoz egy feldolgozási csomópontot minden egyes hozzáadott 6 SU-hoz, a legjobb, ha a csomópontok számát a bemeneti partíciók számának osztójaként hozza létre, így a partíciók egyenletesen eloszthatók a csomópontok között. A 6 SU-feladat például 4 MB/s feldolgozási sebességet érhet el, a bemeneti partíciók száma pedig 4. Dönthet úgy, hogy a feladatot 12 SU-val futtatja, hogy nagyjából 8 MB/s feldolgozási sebességet érjen el, vagy 24 SU-t a 16 MB/s eléréséhez. Ezután eldöntheti, hogy mikor növelje a feladat SU-számát a bemeneti sebesség függvényeként.
2. eset – Ha a lekérdezés nem zavaróan párhuzamos.
Ha a lekérdezés nem zavaróan párhuzamos, kövesse az alábbi lépéseket.
- Először egy PARTITION BY nélküli lekérdezéssel kezdje a particionálás összetettségének elkerülése érdekében, és futtassa a lekérdezést 6 SU-val a maximális terhelés méréséhez, az 1. esethez hasonlóan.
- Ha az átviteli sebesség alatt el tudja érni a várható terhelést, akkor készen áll. Azt is megteheti, hogy megméri ugyanazt a feladatot, amely 3 SU-nál és 1 SU-nál fut, hogy megtudja, az adott forgatókönyvhöz minimálisan hány SU működik.
- Ha nem tudja elérni a kívánt átviteli sebességet, próbálja meg több lépésre bontani a lekérdezést, ha lehetséges, ha még nem rendelkezik több lépéssel, és foglaljon le legfeljebb 6 SU-t a lekérdezés minden lépéséhez. Ha például 3 lépéssel rendelkezik, foglal le 18 SU-t a "Skálázás" beállításban.
- Ilyen feladat futtatásakor a Stream Analytics minden lépést a saját csomópontjára helyez dedikált 6 SU-erőforrással.
- Ha még mindig nem érte el a betöltési célt, megpróbálhatja használni a PARTITION-t a bemenethez közelebbi lépésekből kiindulva. A GROUP BY operátor esetében, amely nem feltétlenül particionálható, használhatja a helyi/globális összesítési mintát egy particionált GROUP BY , majd egy nem particionált GROUP BY végrehajtásához. Ha például meg szeretné számolni, hogy hány autó halad át az egyes fizetős standokon 3 percenként, és az adatok mennyisége meghaladja azt, amit 6 SU kezelhet.
Lekérdezés:
WITH Step1 AS (
SELECT COUNT(*) AS Count, TollBoothId, PartitionId
FROM Input1 Partition By PartitionId
GROUP BY TumblingWindow(minute, 3), TollBoothId, PartitionId
)
SELECT SUM(Count) AS Count, TollBoothId
FROM Step1
GROUP BY TumblingWindow(minute, 3), TollBoothId
A fenti lekérdezésben partíciónként számolja az autókat fizetős standonként, majd összeadja az összes partíció darabszámát.
A particionálást követően a lépés minden partíciója esetében legfeljebb 6 SU-t foglaljon le, a 6 SU-t tartalmazó partíciók a maximálisak, így minden partíció elhelyezhető a saját feldolgozási csomópontján.
Megjegyzés
Ha a lekérdezés nem particionálható, előfordulhat, hogy egy többlépéses lekérdezésben további SU hozzáadása nem mindig növeli az átviteli sebességet. A teljesítmény elérésének egyik módja a kötet csökkentése a kezdeti lépésekben helyi/globális összesítési minta használatával, az 5. lépésben leírtak szerint.
3. eset – Sok független lekérdezést futtat egy feladatban.
Bizonyos ISV-használati esetekben, ahol költséghatékonyabb egyetlen feladat több bérlőjéből származó adatokat feldolgozni, minden bérlőhöz külön bemeneteket és kimeneteket használva, előfordulhat, hogy egy feladatban elég sok (például 20) független lekérdezés fut. A feltételezés az, hogy az egyes al lekérdezések terhelése viszonylag kicsi. Ebben az esetben kövesse az alábbi lépéseket.
- Ebben az esetben ne használja a PARTITION BY parancsot a lekérdezésben
- Event Hub használata esetén csökkentse a bemeneti partíciók számát a lehető legalacsonyabb 2 értékre.
- Futtassa a lekérdezést 6 SU-val. Az egyes segéd lekérdezések várható terhelésével adjon hozzá annyi ilyen segéd lekérdezést, amennyit csak lehet, amíg a feladat el nem éri a rendszer erőforráskorlátait. Ebben az esetben a tüneteket lásd az 1. esetnél .
- Miután elérte a fent mért lekérdezési korlátot, kezdje el hozzáadni a segéd lekérdezést egy új feladathoz. A független lekérdezések számának függvényeként futtatandó feladatok számának meglehetősen lineárisnak kell lennie, feltéve, hogy nincs terheléseltérés. Ezután előre jelezheti, hogy hány SU-feladatot kell futtatnia a kiszolgálni kívánt bérlők számának függvényében.
- Ha referenciaadat-illesztéseket használ az ilyen lekérdezésekkel, egyesítve kell lennie a bemeneteknek, mielőtt ugyanazokhoz a referenciaadatokhoz csatlakozna. Ezután bontsa szét az eseményeket, ha szükséges. Ellenkező esetben minden referenciaadat-illesztés megőrzi a referenciaadatok másolatát a memóriában, ami valószínűleg szükségtelenül robbantja fel a memóriahasználatot.
Megjegyzés
Hány bérlőt kell elhelyezni az egyes feladatokban? Ez a lekérdezési minta gyakran nagy számú segéd lekérdezéssel rendelkezik, és nagyon nagy és összetett topológiát eredményez. Előfordulhat, hogy a feladat vezérlője nem képes kezelni egy ilyen nagy topológiát. Ökölszabályként 40 bérlő alatt maradhat 1 SU-feladathoz, 60 bérlőhöz pedig 3 SU- és 6 SU-feladathoz. Ha túllépi a vezérlő kapacitását, a feladat nem indul el sikeresen.
Segítség kérése
További segítségért próbálja ki a Microsoft Q&A kérdésoldalát az Azure Stream Analyticshez.