Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden Tipps erläutert, um eine bessere Schreibdurchsatzleistung zu erzielen, wenn Sie Daten mithilfe von Azure Stream Analytics in azure SQL-Datenbank laden.
Die SQL-Ausgabe in Azure Stream Analytics unterstützt das Schreiben parallel als Option. Diese Option ermöglicht vollständig parallele Auftragstopologien, bei denen mehrere Ausgabepartitionen parallel in die Zieltabelle geschrieben werden. Das Aktivieren dieser Option in Azure Stream Analytics reicht jedoch möglicherweise nicht aus, um höhere Durchsatze zu erzielen, da sie von Der Datenbankkonfiguration und dem Tabellenschema erheblich abhängt. Die Auswahl von Indizes, Clusterschlüssel, Indexfüllfaktor und Komprimierung wirkt sich auf die Zeit zum Laden von Tabellen aus. Weitere Informationen dazu, wie Sie Ihre Datenbank optimieren, um die Abfrage- und Ladeleistung basierend auf internen Benchmarks zu verbessern, finden Sie unter SQL Database Performance Guidance. Die Sortierung von Schreibvorgängen ist beim Schreiben parallel zur SQL-Datenbank nicht garantiert.
Im Folgenden finden Sie einige Konfigurationen innerhalb jedes Diensts, die den Gesamtdurchsatz Ihrer Lösung verbessern können.
Azure Stream Analytics
Partitionierung erben – Diese SQL-Ausgabekonfigurationsoption ermöglicht das Erben des Partitionierungsschemas Ihres vorherigen Abfrageschritts oder ihrer Eingabe. Mit dieser Einstellung und einer vollständig parallelen Topologie für Ihren Auftrag können Sie einen besseren Durchsatz bei der Arbeit mit einer datenträgerbasierten Tabelle erwarten. Diese Partitionierung erfolgt bereits automatisch für viele andere Ausgaben. Die Tabellensperre (TABLOCK) ist auch für Bulk-Inserts mit dieser Option deaktiviert.
Hinweis
Wenn mehr als 8 Eingabepartitionen vorhanden sind, ist das Erben des Eingabepartitionsschemas möglicherweise keine geeignete Wahl. Diese Obergrenze wurde für eine Tabelle mit einer einzelnen Identitätsspalte und einem gruppierten Index beobachtet. In diesem Fall sollten Sie in Ihrer Abfrage INTO 8 verwenden, um die Anzahl der Ausgabeautoren explizit anzugeben. Basierend auf Ihrem Schema und der Auswahl von Indizes können Ihre Beobachtungen variieren.
Batchgröße – Mit der SQL-Ausgabekonfiguration können Sie die maximale Batchgröße in einer SQL-Ausgabe in Azure Stream Analytics basierend auf der Art ihrer Zieltabelle/-workload angeben. Die Batchgröße ist die maximale Anzahl von Datensätzen, die mit jeder Masseneinfügungstransaktion gesendet wurden. In gruppierten Columnstore-Indizes ermöglichen Batchgrößen um 100 KB mehr Parallelisierung, minimale Protokollierung und Sperroptimierungen. In festplattenbasierten Tabellen kann 10K (Standard) oder weniger für Ihre Lösung optimal sein, da größere Batchgrößen eine Sperreskalation während Masseneinfügungen auslösen können.
Optimierung der Eingabemeldungen – Wenn Sie die Partitionierung und Batchgröße optimiert haben, hilft das Erhöhen der Anzahl von Eingabeereignissen pro Nachricht und Partition, den Schreibdurchsatz weiter zu steigern. Die Optimierung von Eingabemeldungen ermöglicht es, die Batchgrößen in Azure Stream Analytics bis zur angegebenen Batchgröße zu erreichen und dadurch den Durchsatz zu verbessern. Dies kann durch Komprimierung oder Erhöhen der Eingabenachrichtengrößen in EventHub oder Blob erreicht werden.
SQL Azure
Partitionierte Tabelle und Indizes – Die Verwendung einer partitionierten SQL-Tabelle und partitionierten Indizes in der Tabelle mit derselben Spalte wie Der Partitionsschlüssel (z. B. PartitionId) kann die Konflikte zwischen Partitionen während schreibvorgängen erheblich reduzieren. Für eine partitionierte Tabelle müssen Sie eine Partitionsfunktion und ein Partitionsschema in der PRIMARY-Dateigruppe erstellen. Dadurch wird auch die Verfügbarkeit vorhandener Daten erhöht, während neue Daten geladen werden. Der Log-E/A-Grenzwert kann basierend auf der Anzahl der Partitionen erreicht werden, die durch ein Upgrade der SKU erhöht werden kann.
Vermeiden Sie eindeutige Schlüsselverstöße – Wenn Sie im Azure Stream Analytics-Aktivitätsprotokoll mehrere Warnungen zu Schlüsselverstößen erhalten, stellen Sie sicher, dass Ihr Auftrag nicht durch eindeutige Einschränkungsverletzungen beeinträchtigt wird, die wahrscheinlich während der Wiederherstellungsfälle auftreten. Dies kann vermieden werden, indem Sie die Option IGNORE_DUP_KEY in Ihren Indizes festlegen.
Azure Data Factory und In-Memory Tabellen
- In-Memory Tabelle als temporäre Tabelle – In-Memory Tabellen ermöglichen sehr schnelle Datenladevorgänge, aber Daten müssen in den Arbeitsspeicher passen. Benchmarks zeigen, dass das Massenladen von einer In-Memory-Tabelle auf eine datenträgerbasierte Tabelle etwa 10 Mal schneller ist als das direkte Massen-Einfügen mit einem einzelnen Writer in die datenträgerbasierte Tabelle mit einer Identitätsspalte und einem gruppierten Index. Um diese Leistung für Masseneinfügungen zu nutzen, richten Sie einen Kopierauftrag mithilfe von Azure Data Factory ein, der Daten aus der Speichertabelle in die datenträgerbasierte Tabelle kopiert.
Vermeiden von Leistungseinbußen
Das Masseneinfügen von Daten ist viel schneller als das Laden von Daten mit einzelnen Einfügeoperationen, da der wiederholte Aufwand beim Übertragen der Daten, Analysieren der Einfüge-Anweisung, Ausführen der Anweisung und Ausstellen eines Transaktionsdatensatzes vermieden wird. Stattdessen wird ein effizienterer Pfad in die Speicher-Engine genutzt, um die Daten zu streamen. Die Setup-Kosten dieses Pfads sind jedoch wesentlich höher als bei einer einzelnen INSERT-Anweisung in einer festplattenbasierten Tabelle. Die Gewinnschwelle liegt in der Regel bei rund 100 Zeilen, ab der die Stapelverarbeitung fast immer effizienter ist.
Wenn die Rate der eingehenden Ereignisse niedrig ist, kann sie ganz einfach Batchgrößen unter 100 Zeilen erstellen, wodurch die Masseneinfügung ineffizient ist und zu viel Speicherplatz verwendet wird. Um diese Einschränkung zu umgehen, können Sie eine der folgenden Aktionen ausführen:
- Erstellen Sie einen INSTEAD-OF-Trigger
, um für jede Zeile einfaches Einfügen zu ermöglichen. - Verwenden Sie eine In-Memory-Temporärtabelle, wie im vorherigen Abschnitt beschrieben.
Ein weiteres solches Szenario tritt beim Schreiben in einen nicht gruppierten Columnstore-Index (NCCI) auf, bei dem kleinere Masseneinfügungen zu viele Segmente erstellen können, die den Index abstürzen können. In diesem Fall empfiehlt es sich, stattdessen einen Clustered Columnstore-Index zu verwenden.
Zusammenfassung
Zusammenfassend: Mit dem partitionierten Ausgabefeature in Azure Stream Analytics bei SQL-Ausgaben wird die Parallelisierung Ihres Auftrags mit einer partitionierten Tabelle in SQL Azure erhebliche Verbesserungen beim Durchsatz ermöglichen. Die Nutzung von Azure Data Factory zum Koordinieren von Datenbewegungen aus einer In-Memory Tabelle in datenträgerbasierte Tabellen kann zu einer Größenordnung von Durchsatzgewinnen führen. Wenn möglich, kann die Verbesserung der Nachrichtendichte auch ein wichtiger Faktor bei der Verbesserung des Gesamtdurchsatzes sein.
Nächste Schritte
- Grundlegendes zu den Ausgaben von Azure Stream Analytics
- Azure Stream Analytics-Ausgabe in die Azure SQL-Datenbank
- Verwenden von verwalteten Identitäten für den Zugriff auf Azure SQL-Datenbank oder Azure Synapse Analytics aus einem Azure Stream Analytics-Auftrag
- Verwenden von Referenzdaten aus einer SQL-Datenbank für einen Azure Stream Analytics-Auftrag
- Aktualisieren oder Zusammenführen von Datensätzen in der Azure SQL-Datenbank mit Azure-Funktionen
- Schnellstart: Erstellen eines Stream Analytics-Auftrags mithilfe des Azure-Portals