Freigeben über


Analysieren Sie Ihre Arbeitsauslastung für den dedizierten SQL-Pool in Azure Synapse Analytics

Techniken zum Analysieren Ihrer dedizierten SQL-Pool-Workload in Azure Synapse Analytics.

Ressourcenklassen

Der dedizierte SQL-Pool stellt Ressourcenklassen bereit, um Abfragen Systemressourcen zuzuweisen. Weitere Informationen zu Ressourcenklassen finden Sie unter Ressourcenklassen & Workload-Management. Abfragen warten, wenn die einer Abfrage zugewiesene Ressourcenklasse mehr Ressourcen benötigt, als derzeit verfügbar sind.

Erkennung von Abfragen in der Warteschlange und andere DMVs

Sie können die DMV sys.dm_pdw_exec_requests verwenden, um Abfragen zu identifizieren, die in eine Parallelitätswarteschlange eingereiht wurden. Abfragen, die auf einen Parallelitätsslot warten, weisen den Status "ausgesetzt" auf.

SELECT  r.[request_id]                           AS Request_ID
,       r.[status]                               AS Request_Status
,       r.[submit_time]                          AS Request_SubmitTime
,       r.[start_time]                           AS Request_StartTime
,       DATEDIFF(ms,[submit_time],[start_time])  AS Request_InitiateDuration_ms
,       r.resource_class                         AS Request_resource_class
FROM    sys.dm_pdw_exec_requests r
;

Arbeitsauslastungsverwaltungsrollen können mit sys.database_principals angezeigt werden.

SELECT  ro.[name]           AS [db_role_name]
FROM    sys.database_principals ro
WHERE   ro.[type_desc]      = 'DATABASE_ROLE'
AND     ro.[is_fixed_role]  = 0
;

Die folgende Abfrage zeigt, welcher Rolle jeder Benutzer zugewiesen ist.

SELECT  r.name AS role_principal_name
,       m.name AS member_principal_name
FROM    sys.database_role_members rm
JOIN    sys.database_principals AS r            ON rm.role_principal_id      = r.principal_id
JOIN    sys.database_principals AS m            ON rm.member_principal_id    = m.principal_id
WHERE   r.name IN ('mediumrc','largerc','xlargerc')
;

Der dedizierte SQL-Pool verfügt über die folgenden Wartezeittypen:

  • LocalQueriesConcurrencyResourceType: Abfragen, die sich außerhalb des Parallelitäts-Slot-Rahmenwerks befinden. DMV-Abfragen und Systemfunktionen wie SELECT @@VERSION sind Beispiele für lokale Abfragen.
  • UserConcurrencyResourceType: Abfragen, die sich im Parallelitäts-Slot-Framework befinden. Abfragen für Endbenutzertabellen stellen Beispiele dar, die diesen Ressourcentyp verwenden würden.
  • DmsConcurrencyResourceType: Wartezeiten, die sich aus Datenverschiebungsvorgängen ergeben.
  • BackupConcurrencyResourceType: Diese Wartezeit gibt an, dass eine Datenbank gesichert wird. Der Maximalwert für diesen Ressourcentyp ist 1. Wenn mehrere Sicherungen gleichzeitig angefordert wurden, werden die anderen in die Warteschlange gestellt. Im Allgemeinen empfehlen wir eine Mindestzeit zwischen aufeinander folgenden Momentaufnahmen von 10 Minuten.

Mit dem sys.dm_pdw_waits DMV kann festgestellt werden, auf welche Ressourcen eine Anforderung wartet.

SELECT  w.[wait_id]
,       w.[session_id]
,       w.[type]                                           AS Wait_type
,       w.[object_type]
,       w.[object_name]
,       w.[request_id]
,       w.[request_time]
,       w.[acquire_time]
,       w.[state]
,       w.[priority]
,       SESSION_ID()                                       AS Current_session
,       s.[status]                                         AS Session_status
,       s.[login_name]
,       s.[query_count]
,       s.[client_id]
,       s.[sql_spid]
,       r.[command]                                        AS Request_command
,       r.[label]
,       r.[status]                                         AS Request_status
,       r.[submit_time]
,       r.[start_time]
,       r.[end_compile_time]
,       r.[end_time]
,       DATEDIFF(ms,r.[submit_time],r.[start_time])        AS Request_queue_time_ms
,       DATEDIFF(ms,r.[start_time],r.[end_compile_time])   AS Request_compile_time_ms
,       DATEDIFF(ms,r.[end_compile_time],r.[end_time])     AS Request_execution_time_ms
,       r.[total_elapsed_time]
FROM    sys.dm_pdw_waits w
JOIN    sys.dm_pdw_exec_sessions s  ON w.[session_id] = s.[session_id]
JOIN    sys.dm_pdw_exec_requests r  ON w.[request_id] = r.[request_id]
WHERE    w.[session_id] <> SESSION_ID();

Der sys.dm_pdw_resource_waits DMV zeigt die Warteinformationen für eine bestimmte Abfrage an. Die Ressourcenwartezeit misst die Zeit, die auf die Bereitstellung von Ressourcen gewartet wird. Signalwartezeit ist die Zeit, die die zugrunde liegenden SQL-Server benötigen, um die Abfrage zur Ausführung an die CPU zu übergeben.

SELECT  [session_id]
,       [type]
,       [object_type]
,       [object_name]
,       [request_id]
,       [request_time]
,       [acquire_time]
,       DATEDIFF(ms,[request_time],[acquire_time])  AS acquire_duration_ms
,       [concurrency_slots_used]                    AS concurrency_slots_reserved
,       [resource_class]
,       [wait_id]                                   AS queue_position
FROM    sys.dm_pdw_resource_waits
WHERE    [session_id] <> SESSION_ID();

Sie können auch die DMV sys.dm_pdw_resource_waits verwenden, um die Anzahl der gewährten Parallelitätsslots zu berechnen.

SELECT  SUM([concurrency_slots_used]) as total_granted_slots
FROM    sys.[dm_pdw_resource_waits]
WHERE   [state]           = 'Granted'
AND     [resource_class] is not null
AND     [session_id]     <> session_id();

Der sys.dm_pdw_wait_stats DMV kann zur historischen Trendanalyse von Wartezeiten verwendet werden.

SELECT   w.[pdw_node_id]
,        w.[wait_name]
,        w.[max_wait_time]
,        w.[request_count]
,        w.[signal_time]
,        w.[completed_count]
,        w.[wait_time]
FROM    sys.dm_pdw_wait_stats w;

Nächste Schritte

Weitere Informationen zum Verwalten von Datenbankbenutzern und -sicherheit finden Sie unter Sichern eines dedizierten SQL-Pools (früher SQL DW). Weitere Informationen dazu, wie größere Ressourcenklassen die Indexqualität des gruppierten Spaltenspeichers verbessern können, finden Sie unter "Neuerstellen von Indizes", um die Segmentqualität zu verbessern.