Condividi tramite


Analizzare il carico di lavoro per il pool SQL dedicato in Azure Synapse Analytics

Tecniche per l'analisi del carico di lavoro del pool SQL dedicato in Azure Synapse Analytics.

Classi di risorse

Il pool SQL dedicato fornisce classi di risorse per assegnare risorse di sistema alle query. Per altre informazioni sulle classi di risorse, vedere Classi di risorse e gestione del carico di lavoro. Le query attenderanno se la classe di risorse assegnata a una query richiede più risorse di quelle attualmente disponibili.

Rilevamento di query in coda e altre viste a gestione dinamica

È possibile usare la sys.dm_pdw_exec_requests DMV per identificare le query in attesa in una coda di concorrenza. Le query in attesa di uno slot di concorrenza sono in stato sospeso.

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
;

I ruoli di gestione del carico di lavoro possono essere visualizzati con sys.database_principals.

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

La query seguente mostra il ruolo a cui viene assegnato ogni utente.

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')
;

Il pool SQL dedicato ha i tipi di attesa seguenti:

  • LocalQueriesConcurrencyResourceType: query che si trovano all'esterno del framework di slot di concorrenza. Le query DMV e le funzioni di sistema, come SELECT @@VERSION, sono esempi di query locali.
  • UserConcurrencyResourceType: query che rientrano nel framework degli slot di concorrenza. Le query sulle tabelle degli utenti finali rappresentano esempi che userebbero questo tipo di risorsa.
  • DmsConcurrencyResourceType: attese risultanti dalle operazioni di spostamento dei dati.
  • BackupConcurrencyResourceType: questa attesa indica che viene eseguito il backup di un database. Il valore massimo per questo tipo di risorsa è 1. Se vengono richiesti più backup contemporaneamente, gli altri si mettono in coda. In generale, è consigliabile un tempo minimo tra snapshot consecutivi di 10 minuti.

La DMV sys.dm_pdw_waits può essere usata per visualizzare le risorse per cui una richiesta è in attesa.

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();

La sys.dm_pdw_resource_waits DMV mostra le informazioni di attesa per una determinata query. Il tempo di attesa delle risorse misura il tempo in cui si attende che le risorse siano disponibili. Il tempo di attesa del segnale è il tempo necessario per i server SQL sottostanti per pianificare la query nella CPU.

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();

È anche possibile usare la sys.dm_pdw_resource_waits DMV per calcolare il numero di slot di concorrenza concessi.

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();

La sys.dm_pdw_wait_stats DMV può essere usata per l'analisi cronologica delle attese.

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;

Passaggi successivi

Per altre informazioni sulla gestione degli utenti e della sicurezza del database, vedere Proteggere un pool SQL dedicato (in precedenza SQL Data Warehouse). Per altre informazioni su come le classi di risorse di dimensioni maggiori possono migliorare la qualità degli indici columnstore cluster, vedere Ricompilazione degli indici per migliorare la qualità dei segmenti.