Verwalten von Workloads in Azure Synapse Analytics
Azure Synapse Analytics ermöglicht es Ihnen, Ressourcen zu erstellen und die Ressourcenverfügbarkeit zu steuern und zu verwalten, wenn Workloads konkurrieren. So können Sie die relative Priorität der einzelnen Workloads verwalten, wenn auf verfügbare Ressourcen gewartet wird.
Sie können einen Workloadklassifizierer für den Benutzer erstellen, um schnellere Ladezeiten zu ermöglichen. Die „Priorität“ ist dabei auf „above_normal“ oder „high“ festgelegt. Die Workloadpriorität sorgt dafür, dass das Laden Vorrang vor anderen wartenden Tasks hat, die eine Priorität mit geringerer Bewertung erhalten haben. Verwenden Sie diese Möglichkeit in Verbindung mit Ihren eigenen Workloadgruppendefinitionen, um eine Workloadisolation zu erzielen und so minimale und maximale Ressourcenzuordnungen für Spitzenzeiten und für Zeiträume mit weniger Aktivitäten zu verwalten.
Die Workloadverwaltung dedizierter SQL-Pools in Azure Synapse umfasst drei allgemeine Konzepte:
- Klassifizierung der Arbeitsauslastung
- Arbeitsauslastungswichtigkeit
- Workloadisolation
Mit diesen Funktionen können Sie besser steuern, wie Systemressourcen von der Workload genutzt werden.
Workloadklassifizierung
Durch die Klassifizierung der Workloadverwaltung können Richtlinien auf Anforderungen angewendet werden, wobei Ressourcenklassen und Prioritäten zugewiesen werden.
Data Warehousing-Workloads lassen sich auf viele Weisen klassifizieren. Die einfachste und gängigste Klassifizierung besteht allerdings im Laden und Abfragen von Daten. INSERT-, UPDATE- und DELETE-Anweisungen sind „Lasten“ für Daten. Mit SELECT-Anweisungen werden sie abgefragt. Für eine Data Warehousing-Lösung wird häufig eine Workloadrichtlinie für Ladeaktivitäten eingesetzt, wodurch z. B. eine höhere Ressourcenklasse und mehr Ressourcen zugewiesen werden können. Eine unterschiedliche Workloadrichtlinie könnte auf Abfragen angewendet werden, wodurch beispielsweise im Gegensatz zu Ladeaktivitäten eine niedrigere Priorität festgelegt wird.
Für Lade- und Abfrageworkloads können Sie auch Unterklassifizierungen erstellen. Durch diese erhalten Sie mehr Kontrolle über Ihre Workloads. Abfrageworkloads können beispielsweise aus Cubeaktualisierungen, Dashboardabfragen oder Ad-hoc-Abfragen bestehen. Sie können jede dieser Abfrageworkloads mit unterschiedlichen Ressourcenklassen oder Prioritätseinstellungen klassifizieren. Auch Ladevorgänge können von der Unterklassifizierung profitieren. Große Transformationen können größeren Ressourcenklassen zugewiesen werden. Durch eine höhere Priorität kann sichergestellt werden, dass wichtige Umsatzdaten vor Wetterdaten oder einem sozialen Datenfeed geladen werden.
Nicht alle Anweisungen sind klassifiziert, da sie keine Ressourcen oder Bedeutung erfordern, um die Ausführung zu beeinflussen. DBCC-Befehle, BEGIN-, COMMIT- und ROLLBACK TRANSACTION-Anweisungen werden nicht klassifiziert.
Workloadpriorität
Die Workloadpriorität wirkt sich auf die Reihenfolge aus, in der eine Anforderung Zugriff auf Ressourcen erhält. Auf einem ausgelasteten System hat eine Anforderung mit höherer Priorität zuerst Zugriff auf Ressourcen. Durch die Priorität kann auch der geordnete Zugriff auf Sperren sichergestellt werden. Es gibt fünf Prioritätsstufen: „low“, „below_normal“, „normal“, „above_normal“ und „high“. Anforderungen, für die keine Priorität festgelegt wird, weisen die Standardstufe „normal“ auf. Anforderungen mit der gleichen Prioritätsstufe weisen das herkömmliche Planungsverhalten auf.
Workloadisolation
Mit der Workloadisolation werden Ressourcen für eine Arbeitsauslastungsgruppe reserviert. Ressourcen, die in einer Arbeitsauslastungsgruppe reserviert sind, werden ausschließlich für diese Arbeitsauslastungsgruppe bereitgehalten, um die Ausführung zu gewährleisten. Mithilfe von Arbeitsauslastungsgruppen können Sie auch die Menge der Ressourcen definieren, die pro Anforderung zugewiesen werden, ähnlich wie bei Ressourcenklassen. Arbeitsauslastungsgruppen bieten Ihnen die Möglichkeit, die Menge an Ressourcen zu reservieren oder zu begrenzen, die von einer Gruppe von Anforderungen belegt werden können. Außerdem stellen Arbeitsauslastungsgruppen einen Mechanismus zum Anwenden von Regeln (z.B. Abfragetimeout) auf Anforderungen dar.
Sie können die folgenden Schritte durchführen, um die Workloadverwaltung zu implementieren.
Erstellen eines Workloadklassifizierers zum Hinzufügen von Prioritäten zu bestimmten Abfragen
Ihre Organisation hat Sie gefragt, ob es eine Möglichkeit gibt, vom CEO ausgeführte Abfragen mit einer höheren Priorität als andere zu markieren, damit deren Ausführung aufgrund umfassender Datenladevorgänge oder anderer Workloads in der Warteschlange nicht langsam erscheint. Sie haben sich entschlossen, einen Workloadklassifizierer zu erstellen und Prioritäten hinzuzufügen, um die Abfragen des CEOs zu priorisieren.
Wählen Sie den Hub Entwickeln aus.
Klicken Sie erst im Menü Entwicklung auf die Schaltfläche + (1) und dann im Kontextmenü auf SQL-Skript (2).
Stellen Sie im Menü der Symbolleiste eine Verbindung zur Datenbank SQL-Pool her, um die Abfrage auszuführen.
Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um zu bestätigen, dass aktuell keine Abfragen von Benutzern ausgeführt werden, die als
asa.sql.workload01
angemeldet sind, was dem CEO der Organisation entspräche, oder vonasa.sql.workload02
, was für den Data Analyst steht, der am Projekt arbeitet:--First, let's confirm that there are no queries currently being run by users logged in workload01 or workload02 SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') --and submit_time>dateadd(minute,-2,getdate()) ORDER BY submit_time ,s.login_name
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Sie haben nun bestätigen können, dass aktuell keine Abfragen ausgeführt werden. Jetzt müssen Sie eine Vielzahl von Abfragen im System ausführen und sich ansehen, was für
asa.sql.workload01
undasa.sql.workload02
geschieht. Dazu führen Sie eine Azure Synapse-Pipeline aus, die Abfragen auslöst.Wählen Sie den Integrationshub aus.
Wählen Sie die Pipeline Lab 08 – Execute Data Analyst and CEO Queries (1) aus, die die Abfragen
asa.sql.workload01
undasa.sql.workload02
auslöst und ausführt. Klicken Sie erst auf Trigger hinzufügen (2) und dann auf Trigger now (3) (Jetzt auslösen). Klicken Sie im angezeigten Dialogfeld auf OK.Sehen Sie sich nun an, welches Verhalten für die vielen Abfragen aufgetreten ist, die Sie für das System soeben ausgelöst haben. Ersetzen Sie im Abfragefenster das Skript durch das folgende:
SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') and submit_time>dateadd(minute,-2,getdate()) ORDER BY submit_time ,status
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:
Beachten Sie, dass als Priorität für alle Abfragen normal festgelegt ist.
Die Abfragen des Benutzers
asa.sql.workload01
sollen Priorität vor anderen Abfragen erhalten. Dies erreichen Sie, indem Sie das Featureasa.sql.workload01
implementieren. Ersetzen Sie im Abfragefenster das Skript durch das folgende:IF EXISTS (SELECT * FROM sys.workload_management_workload_classifiers WHERE name = 'CEO') BEGIN DROP WORKLOAD CLASSIFIER CEO; END CREATE WORKLOAD CLASSIFIER CEO WITH (WORKLOAD_GROUP = 'largerc' ,MEMBERNAME = 'asa.sql.workload01',IMPORTANCE = High);
Sie führen dieses Skript aus, um einen neuen Workloadklassifizierer namens
CEO
zu erstellen, der die Workloadgruppelargerc
verwendet und die Priorität der Abfragen auf High festlegt.Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Führen Sie noch mal mehrere Abfragen für das System aus, und sehen Sie sich an, was dieses Mal für die Abfragen
asa.sql.workload01
undasa.sql.workload02
geschieht. Dazu führen Sie eine Azure Synapse-Pipeline aus, die Abfragen auslöst. Wählen Sie die RegisterkarteIntegrate
aus, und führen Sie die Pipeline Lab 08 – Execute Data Analyst and CEO Queries aus, die die Abfragenasa.sql.workload01
undasa.sql.workload02
auslöst und ausführt.Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um zu sehen, was dieses Mal für die
asa.sql.workload01
-Abfragen geschieht:SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload01','asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') and submit_time>dateadd(minute,-2,getdate()) ORDER BY submit_time ,status desc
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:
Beachten Sie, dass die vom Benutzer
asa.sql.workload01
ausgeführten Abfragen die Prioritätasa.sql.workload01
aufweisen.Wählen Sie den Überwachungshub aus.
Klicken Sie erst auf Pipelineausführungen (1) und dann für jede ausgeführte Lab 08-Pipeline, die als In Bearbeitung (3) markiert ist, auf Rekursiv abbrechen (2). So können die verbleibenden Tasks beschleunigt werden.
Reservieren von Ressourcen für bestimmte Workloads mithilfe von Workloadisolation
Workloadisolation bedeutet, dass Ressourcen ausschließlich für eine Arbeitsauslastungsgruppe reserviert sind. Arbeitsauslastungsgruppen sind Container für eine Reihe von Anforderungen und bilden die Grundlage für die Konfiguration der Workloadverwaltung, einschließlich der Workloadisolation, auf einem System. Bei einer einfachen Konfiguration der Workloadverwaltung können Datenladevorgänge und Benutzerabfragen verwaltet werden.
Wenn keine Workloadisolation vorhanden ist, werden Anforderungen im freigegebenen Pool von Ressourcen ausgeführt. Der Zugriff auf Ressourcen im freigegebenen Pool ist nicht garantiert und wird auf Basis der Priorität zugewiesen.
Angesichts der Workloadanforderungen von Tailwind Traders haben Sie sich entschlossen, eine neue Workloadgruppe namens CEODemo
zu erstellen, um Ressourcen für vom CEO ausgeführte Abfragen zu reservieren.
Experimentieren Sie dazu zunächst mit verschiedenen Parametern.
Ersetzen Sie im Abfragefenster das Skript durch das folgende:
IF NOT EXISTS (SELECT * FROM sys.workload_management_workload_groups where name = 'CEODemo') BEGIN Create WORKLOAD GROUP CEODemo WITH ( MIN_PERCENTAGE_RESOURCE = 50 -- integer value ,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 25 -- ,CAP_PERCENTAGE_RESOURCE = 100 ) END
Das Skript erstellt eine Workloadgruppe namens
CEODemo
, um Ressourcen exklusiv für die Workloadgruppe zu reservieren. In diesem Beispiel istMIN_PERCENTAGE_RESOURCE
auf 50 Prozent festgelegt undREQUEST_MIN_RESOURCE_GRANT_PERCENT
auf 25 Prozent. So kann für eine Workloadgruppe die Parallelität für zwei Vorgänge garantiert werden.Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um einen Workloadklassifizierer namens
CEODreamDemo
zu erstellen, der eingehenden Anforderungen eine Workloadgruppe und Priorität zuweist:IF NOT EXISTS (SELECT * FROM sys.workload_management_workload_classifiers where name = 'CEODreamDemo') BEGIN Create Workload Classifier CEODreamDemo with ( Workload_Group ='CEODemo',MemberName='asa.sql.workload02',IMPORTANCE = BELOW_NORMAL); END
Dieses Skript legt die Priorität auf below_normal für den Benutzer
asa.sql.workload02
fest. Dafür wird der neue WorkloadklassifiziererCEODreamDemo
verwendet.Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um zu bestätigen, dass keine aktiven Abfragen von
asa.sql.workload02
ausgeführt werden (angehaltene Abfragen sind in Ordnung):SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') ORDER BY submit_time, status
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Wählen Sie den Integrationshub aus.
Wählen Sie die Pipeline Lab 08 – Execute Business Analyst Queries (1) aus, die
asa.sql.workload02
-Abfragen ausführt/auslöst. Klicken Sie erst auf Trigger hinzufügen (2) und dann auf Trigger now (3) (Jetzt auslösen). Klicken Sie im angezeigten Dialogfeld auf OK.Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um zu sehen, was mit den vielen
asa.sql.workload02
-Abfragen geschehen ist, die Sie soeben ausgelöst haben und die im System ausgeführt wurden:SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') ORDER BY submit_time, status
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Sie sollten eine Ausgabe ähnlich der folgenden sehen, in der die Priorität der einzelnen Sitzungen auf
below_normal
festgelegt ist:Beachten Sie, dass die ausgeführten Skripts vom Benutzer
asa.sql.workload02
asa.sql.workload02
mit auf below_normal (2) festgelegter Prioritätsebene ausgeführt wurden. Sie haben die Business-Analyst-Abfragen erfolgreich so konfiguriert, dass sie mit niedrigerer Priorität als die Abfragen des CEOs ausgeführt werden. Sie sehen außerdem, dass der WorkloadklassifiziererCEODreamDemo
erwartungsgemäß funktioniert.Wählen Sie den Überwachungshub aus.
Klicken Sie erst auf Pipelineausführungen (1) und dann für jede ausgeführte Lab 08-Pipeline, die als In Bearbeitung (3) markiert ist, auf Rekursiv abbrechen (2). So können die verbleibenden Tasks beschleunigt werden.
Kehren Sie zum Abfragefenster im Entwicklungshub zurück. Ersetzen Sie das Skript im Abfragefenster durch das folgende Skript, um pro Anforderung 3,25 Prozent an Mindestressourcen festzulegen:
IF EXISTS (SELECT * FROM sys.workload_management_workload_classifiers where group_name = 'CEODemo') BEGIN Drop Workload Classifier CEODreamDemo DROP WORKLOAD GROUP CEODemo --- Creates a workload group 'CEODemo'. Create WORKLOAD GROUP CEODemo WITH (MIN_PERCENTAGE_RESOURCE = 26 -- integer value ,REQUEST_MIN_RESOURCE_GRANT_PERCENT = 3.25 -- factor of 26 (guaranteed more than 4 concurrencies) ,CAP_PERCENTAGE_RESOURCE = 100 ) --- Creates a workload Classifier 'CEODreamDemo'. Create Workload Classifier CEODreamDemo with (Workload_Group ='CEODemo',MemberName='asa.sql.workload02',IMPORTANCE = BELOW_NORMAL); END
Hinweis
Durch Konfigurieren der Workloadkapselung wird implizit ein maximaler Grad an Parallelität definiert. Wenn CAP_PERCENTAGE_RESOURCE auf 60 % und REQUEST_MIN_RESOURCE_GRANT_PERCENT auf 1 % festgelegt wird, ist für die Arbeitsauslastungsgruppe ein Grad an Parallelität von 60 zulässig. Sehen Sie sich die unten enthaltene Methode an, um die maximale Parallelität zu bestimmen: [Max Concurrency] = [CAP_PERCENTAGE_RESOURCE] / [REQUEST_MIN_RESOURCE_GRANT_PERCENT].
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Führen Sie für das System noch mal mehrere Abfragen aus, und sehen Sie sich an, was für
asa.sql.workload02
geschieht. Dazu führen Sie eine Azure Synapse-Pipeline aus, die Abfragen auslöst. Wählen Sie die RegisterkarteIntegrate
aus. Führen Sie die Pipeline Lab 08 – Execute Business Analyst Queries aus, dieasa.sql.workload02
-Abfragen ausführt/auslöst.Ersetzen Sie im Abfragefenster das Skript durch das folgende Skript, um zu sehen, was mit den vielen
asa.sql.workload02
-Abfragen geschehen ist, die Sie soeben ausgelöst haben und die im System ausgeführt wurden:SELECT s.login_name, r.[Status], r.Importance, submit_time, start_time ,s.session_id FROM sys.dm_pdw_exec_sessions s JOIN sys.dm_pdw_exec_requests r ON s.session_id = r.session_id WHERE s.login_name IN ('asa.sql.workload02') and Importance is not NULL AND r.[status] in ('Running','Suspended') ORDER BY submit_time, status
Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.
Nach einem gewissen Zeitraum (bis zu einer Minute) sollten mehrere gleichzeitige Ausführungen vom Benutzer
asa.sql.workload02
mit einerasa.sql.workload02
festgelegten Priorität durchgeführt werden. Sie konnten feststellen, dass die bearbeitete Workloadgruppe und der Workloadklassifizierer wie erwartet funktionieren.Wählen Sie den Überwachungshub aus.
Klicken Sie erst auf Pipelineausführungen (1) und dann für jede ausgeführte Lab 08-Pipeline, die als In Bearbeitung (3) markiert ist, auf Rekursiv abbrechen (2). So können die verbleibenden Tasks beschleunigt werden.