Zvýšení výkonu propustnosti do služby Azure SQL Database z Azure Stream Analytics

Tento článek popisuje tipy, jak dosáhnout vyšší propustnosti zápisu při načítání dat do Azure SQL Database pomocí Azure Stream Analytics.

Výstup SQL ve službě Azure Stream Analytics podporuje paralelní zápis jako možnost. Tato možnost umožňuje plně paralelní topologie úloh, kdy několik výstupních oddílů paralelně zapisuje do cílové tabulky. Povolení této možnosti v Azure Stream Analytics ale nemusí stačit k dosažení vyšší propustnosti, protože to do značné míry závisí na konfiguraci databáze a schématu tabulky. Volba indexů, klíče clusteringu, faktoru zaplnění indexu a komprese mají vliv na dobu načítání tabulek. Další informace o tom, jak optimalizovat databázi za účelem zlepšení výkonu dotazů a načítání na základě interních srovnávacích testů, najdete v tématu SQL Database pokyny k výkonu. Při paralelním zápisu do SQL Database není zaručeno řazení zápisů.

Tady je několik konfigurací v rámci každé služby, které vám můžou pomoct zlepšit celkovou propustnost vašeho řešení.

Azure Stream Analytics

  • Dědit dělení – Tato možnost konfigurace výstupu SQL umožňuje dědění schématu dělení předchozího kroku dotazu nebo vstupu. Pokud je tato možnost povolená, při zápisu do tabulky založené na disku a plně paralelní topologii pro vaši úlohu očekáváte lepší propustnost. K tomuto dělení už automaticky dochází u mnoha dalších výstupů. Uzamčení tabulek (TABLOCK) je také zakázáno pro hromadné vložení provedené pomocí této možnosti.

    Poznámka

    Pokud existuje více než 8 vstupních oddílů, nemusí být dědění schématu vstupních oddílů vhodnou volbou. Tento horní limit byl zjištěn u tabulky s jedním sloupcem identity a clusterovaným indexem. V tomto případě zvažte použití INTO 8 v dotazu, abyste explicitně určili počet výstupních zapisovačů. V závislosti na schématu a volbě indexů se vaše pozorování mohou lišit.

  • Velikost dávky – Konfigurace výstupu SQL umožňuje zadat maximální velikost dávky ve výstupu SQL služby Azure Stream Analytics na základě povahy cílové tabulky nebo úlohy. Velikost dávky je maximální počet záznamů odeslaných při každé transakci hromadného vložení. V clusterovaných indexech columnstore umožňují dávky o velikosti kolem 100 000 kB větší paralelizaci, minimální protokolování a optimalizaci uzamčení. V tabulkách založených na disku může být pro vaše řešení optimální 10 kB (výchozí) nebo nižší, protože vyšší velikosti dávek můžou aktivovat eskalaci zámku během hromadného vkládání.

  • Ladění vstupních zpráv – pokud jste optimalizaci provedli s využitím dědění oddílů a velikosti dávky, zvýšení počtu vstupních událostí na zprávu a oddíl vám pomůže zvýšit propustnost zápisu. Ladění vstupních zpráv umožňuje, aby velikosti dávek v rámci Azure Stream Analytics byly až do zadané velikosti batch, což zvyšuje propustnost. Toho můžete dosáhnout pomocí komprese nebo zvětšením velikosti vstupních zpráv v EventHubu nebo objektu blob.

SQL Azure

  • Dělené tabulky a indexy – Použití dělené tabulky SQL a dělených indexů v tabulce se stejným sloupcem jako klíč oddílu (například PartitionId) může výrazně snížit kolize mezi oddíly během zápisu. V případě tabulky s oddíly budete muset ve skupině souborů PRIMARY vytvořit funkci oddílu a schéma oddílů . Tím se také zvýší dostupnost stávajících dat při načítání nových dat. V závislosti na počtu oddílů může dojít k dosažení limitu vstupně-výstupních operací protokolu, který je možné zvýšit upgradem skladové položky.

  • Vyhněte se porušení jedinečných klíčů – Pokud se v protokolu aktivit Azure Stream Analytics zobrazí více zpráv s upozorněním na porušení klíče , ujistěte se, že na vaši úlohu nemá vliv jedinečná porušení omezení, ke kterým pravděpodobně dojde během případů obnovení. Můžete tomu předejít nastavením možnosti IGNORE_DUP_KEY u indexů.

tabulky Azure Data Factory a In-Memory

  • Tabulka v paměti jako dočasná tabulkaTabulky v paměti umožňují velmi rychlé načítání dat, ale data se musí vejít do paměti. Srovnávací testy ukazují, že hromadné načítání z tabulky v paměti do tabulky založené na disku je asi 10krát rychlejší než přímé hromadné vkládání pomocí jednoho zápisu do diskové tabulky se sloupcem identity a clusterovaným indexem. Pokud chcete tento výkon hromadného vkládání využít, nastavte úlohu kopírování pomocí Azure Data Factory, která kopíruje data z tabulky v paměti do tabulky založené na disku.

Předcházení nástrahám výkonu

Hromadné vkládání dat je mnohem rychlejší než načítání dat pomocí jednoduchých vložení, protože se vyhnete opakované režii související s přenosem dat, analýzou příkazu insert, spuštěním příkazu a vystavením záznamu transakce. Místo toho se do modulu úložiště používá efektivnější cesta ke streamování dat. Náklady na nastavení této cesty jsou však mnohem vyšší než jeden příkaz vložení v tabulce založené na disku. Bod zalomení je obvykle kolem 100 řádků, za nimiž je hromadné načítání téměř vždy efektivnější.

Pokud je frekvence příchozích událostí nízká, může snadno vytvořit dávky menší než 100 řádků, což znamená, že hromadné vkládání je neefektivní a zabírají příliš mnoho místa na disku. Pokud chcete toto omezení obejít, můžete provést jednu z těchto akcí:

  • Vytvořte aktivační událost MÍSTO TOHO, abyste pro každý řádek použili jednoduché vložení.
  • Použijte In-Memory dočasnou tabulku, jak je popsáno v předchozí části.

K dalšímu takovému scénáři dochází při zápisu do nes clusterovaného indexu columnstore (NCCI), kdy menší hromadné vložení může vytvořit příliš mnoho segmentů, které můžou index zhroutit. V takovém případě doporučujeme místo toho použít clusterovaný index Columnstore.

Souhrn

Stručně řečeno, díky funkci rozděleného výstupu ve službě Azure Stream Analytics pro výstup SQL by sladěná paralelizace úlohy s dělenou tabulkou v SQL Azure měla výrazně zlepšit propustnost. Využití Azure Data Factory k orchestraci přesunu dat z In-Memory tabulky do tabulek založených na disku může dosáhnout řádového zvýšení propustnosti. Pokud je to možné, může být hlavním faktorem při zlepšování celkové propustnosti také zvýšení hustoty zpráv.

Další kroky