Verwalten von Workloads in Azure Synapse Analytics

Abgeschlossen

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.

  1. Wählen Sie den Hub Entwickeln aus.

    Der Entwicklungshub ist hervorgehoben.

  2. Klicken Sie erst im Menü Entwicklung auf die Schaltfläche + (1) und dann im Kontextmenü auf SQL-Skript (2).

    Das Kontextmenüelement für SQL-Skripts ist hervorgehoben.

  3. Stellen Sie im Menü der Symbolleiste eine Verbindung zur Datenbank SQL-Pool her, um die Abfrage auszuführen.

    Die Option zum Herstellen der Verbindung ist in der Abfragesymbolleiste hervorgehoben.

  4. 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 von asa.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
    
  5. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist in der Abfragesymbolleiste hervorgehoben.

    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 und asa.sql.workload02 geschieht. Dazu führen Sie eine Azure Synapse-Pipeline aus, die Abfragen auslöst.

  6. Wählen Sie den Integrationshub aus.

    Der Integrationshub ist hervorgehoben.

  7. Wählen Sie die Pipeline Lab 08 – Execute Data Analyst and CEO Queries (1) aus, die die Abfragen asa.sql.workload01 und asa.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.

    Menüelemente „Trigger hinzufügen“ und „Jetzt auslösen“

  8. 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
    
  9. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist auf der Abfragesymbolleiste wieder hervorgehoben.

    Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:

    Anzeigen der Ergebnisse der SQL-Abfrage

    Beachten Sie, dass als Priorität für alle Abfragen normal festgelegt ist.

  10. Die Abfragen des Benutzers asa.sql.workload01 sollen Priorität vor anderen Abfragen erhalten. Dies erreichen Sie, indem Sie das Feature asa.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 Workloadgruppe largerc verwendet und die Priorität der Abfragen auf High festlegt.

  11. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist auf der Abfragesymbolleiste wieder hervorgehoben.

  12. 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 und asa.sql.workload02 geschieht. Dazu führen Sie eine Azure Synapse-Pipeline aus, die Abfragen auslöst. Wählen Sie die Registerkarte Integrate aus, und führen Sie die Pipeline Lab 08 – Execute Data Analyst and CEO Queries aus, die die Abfragen asa.sql.workload01 und asa.sql.workload02 auslöst und ausführt.

  13. 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
    
  14. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist wieder hervorgehoben.

    Es sollte eine Ausgabe angezeigt werden, die Folgendem ähnelt:

    SQL-Abfrageergebnisse

    Beachten Sie, dass die vom Benutzer asa.sql.workload01 ausgeführten Abfragen die Priorität asa.sql.workload01 aufweisen.

  15. Wählen Sie den Überwachungshub aus.

    Der Überwachungshub ist hervorgehoben.

  16. 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.

    Die Option „Rekursiv abbrechen“ wird angezeigt.

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.

  1. 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 ist MIN_PERCENTAGE_RESOURCE auf 50 Prozent festgelegt und REQUEST_MIN_RESOURCE_GRANT_PERCENT auf 25 Prozent. So kann für eine Workloadgruppe die Parallelität für zwei Vorgänge garantiert werden.

  2. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist hervorgehoben.

  3. 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 Workloadklassifizierer CEODreamDemo verwendet.

  4. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“

  5. 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
    
  6. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Wieder die Schaltfläche „Ausführen“

  7. Wählen Sie den Integrationshub aus.

    Der Integrationshub ist erneut hervorgehoben.

  8. 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.

    Menüelemente „Trigger hinzufügen“ und „Jetzt auslösen“ sind hervorgehoben.

  9. 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
    
  10. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist auf der Abfragesymbolleiste ausgewählt.

    Sie sollten eine Ausgabe ähnlich der folgenden sehen, in der die Priorität der einzelnen Sitzungen auf below_normal festgelegt ist:

    Die Skriptergebnisse zeigen, dass die einzelnen Sitzungen mit einer auf BELOW_NORMAL festgelegten Priorität ausgeführt wurden.

    Beachten Sie, dass die ausgeführten Skripts vom Benutzer asa.sql.workload02asa.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 Workloadklassifizierer CEODreamDemo erwartungsgemäß funktioniert.

  11. Wählen Sie den Überwachungshub aus.

    Der Überwachungshub

  12. 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.

    Die Option „Rekursiv abbrechen“ wird angezeigt, Screenshot 2.

  13. 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].

  14. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist erneut auf der Abfragesymbolleiste ausgewählt.

  15. 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 Registerkarte Integrate aus. Führen Sie die Pipeline Lab 08 – Execute Business Analyst Queries aus, die asa.sql.workload02-Abfragen ausführt/auslöst.

  16. 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
    
  17. Klicken Sie im Menü der Symbolleiste auf Ausführen, um den SQL-Befehl auszuführen.

    Die Schaltfläche „Ausführen“ ist auf der Abfragesymbolleiste hervorgehoben.

    Nach einem gewissen Zeitraum (bis zu einer Minute) sollten mehrere gleichzeitige Ausführungen vom Benutzer asa.sql.workload02 mit einer asa.sql.workload02 festgelegten Priorität durchgeführt werden. Sie konnten feststellen, dass die bearbeitete Workloadgruppe und der Workloadklassifizierer wie erwartet funktionieren.

    Die Skriptergebnisse zeigen, dass die einzelnen Sitzungen mit einer auf „below_normal“ festgelegten Priorität ausgeführt wurden.

  18. Wählen Sie den Überwachungshub aus.

    Der Überwachungshub ist hervorgehoben.

  19. 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.

    Die Option „Rekursiv abbrechen“ wird angezeigt, Screenshot 3.