Az Azure Stream Analyticsből az Azure SQL Database-be irányuló átviteli teljesítmény növelése

Ez a cikk azokat a tippeket ismerteti, amelyekkel jobb írási teljesítményt érhet el, amikor adatokat tölt be Azure SQL Database-be az Azure Stream Analytics használatával.

Az Azure Stream Analytics SQL-kimenete támogatja a párhuzamos írást lehetőségként. Ez a beállítás teljesen párhuzamos feladattopológiákat tesz lehetővé, ahol több kimeneti partíció ír párhuzamosan a céltáblába. Ennek a beállításnak az Azure Stream Analyticsben való engedélyezése azonban nem feltétlenül elegendő a nagyobb átviteli sebesség eléréséhez, mivel ez jelentősen függ az adatbázis konfigurációjától és a táblasémától. Az indexek, a fürtözési kulcs, az indexkitöltési tényező és a tömörítés kiválasztása hatással van a táblák betöltésének idejére. További információ arról, hogyan optimalizálhatja az adatbázist a lekérdezési és terhelési teljesítmény belső teljesítményteszteken alapuló javítására, lásd SQL Database teljesítményre vonatkozó útmutatót. Az írások sorrendje nem garantált, ha a SQL Database párhuzamosan ír.

Íme néhány konfiguráció az egyes szolgáltatásokon belül, amelyek segíthetnek a megoldás általános átviteli sebességének javításában.

Azure Stream Analytics

  • Particionálás öröklése – Ez az SQL kimeneti konfigurációs beállítás lehetővé teszi az előző lekérdezési lépés vagy bemenet particionálási sémájának öröklését. Ha ez engedélyezve van, lemezalapú táblába ír, és teljes mértékben párhuzamos topológiával rendelkezik a feladathoz, várhatóan jobb átviteli sebességet fog látni. Ez a particionálás már sok más kimenet esetében is automatikusan megtörténik. A táblázatzárolás (TABLOCK) is le van tiltva az ezzel a beállítással készült tömeges beszúrások esetében.

    Megjegyzés

    Ha több mint 8 bemeneti partíció van, előfordulhat, hogy a bemeneti particionálási séma öröklése nem megfelelő választás. Ezt a felső korlátot egy egyetlen identitásoszlopot és egy fürtözött indexet tartalmazó táblában figyelték meg. Ebben az esetben fontolja meg az INTO 8 használatát a lekérdezésben a kimeneti írók számának explicit megadásához. A sémája és az indexek kiválasztása alapján a megfigyelések eltérőek lehetnek.

  • Batch Size – Az SQL kimeneti konfigurációja lehetővé teszi a maximális kötegméret megadását egy Azure Stream Analytics SQL-kimenetben a céltábla/számítási feladat természete alapján. A kötegméret az összes tömeges beszúrási tranzakcióval küldött rekordok maximális száma. A fürtözött oszlopcentrikus indexek esetében a 100 000 körüli kötegméretek lehetővé teszik a párhuzamosítást, a minimális naplózást és a zárolás optimalizálását. A lemezalapú táblákban a 10 ezres (alapértelmezett) vagy alacsonyabb érték optimális lehet a megoldáshoz, mivel a nagyobb kötegméretek zároláseszkalációt válthatnak ki a tömeges beszúrások során.

  • Bemeneti üzenetek hangolása – Ha a particionálás és a kötegméret öröklése használatával optimalizált, a partíciónkénti üzenetenkénti bemeneti események számának növelése segít az írási átviteli sebesség további növelésében. A bemeneti üzenetek hangolása lehetővé teszi, hogy az Azure Stream Analytics kötegmérete a megadott Batch-méretig legyen, ezáltal javítja az átviteli sebességet. Ez a tömörítéssel vagy a bemeneti üzenetek méretének növelésével érhető el az EventHubon vagy a Blobban.

SQL Azure

  • Particionált táblák és indexek – Ha particionált SQL-táblát és particionált indexeket használ a táblán a partíciókulcs oszlopával (például PartitionId), jelentősen csökkentheti a partíciók közötti versengéseket az írások során. Particionált tábla esetén létre kell hoznia egy partíciófüggvényt és egy partíciós sémát az ELSŐDLEGES fájlcsoporton. Ez a meglévő adatok rendelkezésre állását is növeli az új adatok betöltésekor. A napló I/O-korlátját a partíciók száma alapján lehet érvényesíteni, amely a termékváltozat frissítésével növelhető.

  • Az egyedi kulcssértések elkerülése – Ha az Azure Stream Analytics tevékenységnaplójában több kulcssértési figyelmeztető üzenet jelenik meg, győződjön meg arról, hogy a feladatra nem lesz hatással a helyreállítási esetekben valószínűleg előforduló egyedi kényszersértések. Ez elkerülhető az indexek IGNORE_DUP_KEY beállításának beállításával.

Azure Data Factory és In-Memory táblák

  • Memóriabeli tábla ideiglenes táblakéntA memóriában lévő táblák nagyon nagy sebességű adatbetöltést biztosítanak, de az adatoknak el kell férnie a memóriában. A teljesítménytesztek azt mutatják, hogy a memóriabeli táblából egy lemezalapú táblába való tömeges betöltés körülbelül tízszer gyorsabb, mint a közvetlen tömeges beszúrás egyetlen íróval a lemezalapú táblába egy identitásoszlop és egy fürtözött index használatával. A tömeges beszúrási teljesítmény kihasználásához állítson be egy másolási feladatot Azure Data Factory használatával, amely adatokat másol a memóriában lévő táblából a lemezalapú táblába.

A teljesítménybeli buktatók elkerülése

Az adatok tömeges beszúrása sokkal gyorsabb, mint az adatok egyszeri beszúrásokkal való betöltése, mivel az adatok átvitelének, a beszúrási utasítás elemzésének, a utasítás futtatásának és a tranzakciós rekord kiállításának ismétlődő többletterhelése elkerülhető. Ehelyett hatékonyabb elérési utat használnak a tárolómotorba az adatok streameléséhez. Ennek az elérési útnak a telepítési költsége azonban sokkal magasabb, mint egy lemezalapú tábla egyetlen beszúrási utasítása. A töréspont általában 100 sor körül van, amelyen túl a tömeges betöltés szinte mindig hatékonyabb.

Ha a bejövő események száma alacsony, könnyen létrehozhat 100 sornál kisebb kötegméreteket, ami nem hatékony a tömeges beszúráshoz, és túl sok lemezterületet használ. A korlátozás megkerüléséhez hajtsa végre az alábbi műveletek egyikét:

  • Hozzon létre egy HELYETT eseményindítót , hogy minden sorhoz egyszerű beszúrást használjon.
  • Használjon In-Memory temp táblát az előző szakaszban leírtak szerint.

Egy másik ilyen forgatókönyv akkor fordul elő, amikor nem fürtözött oszlopcentrikus indexbe (NCCI) írnak, ahol a kisebb tömeges beszúrások túl sok szegmenst hozhatnak létre, amelyek összeomolhatják az indexet. Ebben az esetben a javaslat egy fürtözött oszlopcentrikus index használata.

Összefoglalás

Összefoglalva, az Sql-kimenethez készült Azure Stream Analytics particionált kimeneti funkciójával a feladat egy particionált táblával való párhuzamosítása SQL Azure jelentős átviteli sebességet eredményez. Ha Azure Data Factory egy In-Memory táblából lemezalapú táblákba történő adatáthelyezést vezényel, nagyságrendi átviteli sebességnövekedést adhat. Ha lehetséges, az üzenetsűrűség javítása is fontos tényező lehet az általános átviteli sebesség javításában.

Következő lépések