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 utilizzare la DMV sys.dm_pdw_exec_requests 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 è 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 si trovano all'interno del framework di slot di concorrenza. Le query sulle tabelle dell'utente finale rappresentano esempi in cui si usa questo tipo di risorsa.
  • DmsConcurrencyResourceType: attese risultanti dalle operazioni di spostamento dei dati.
  • BackupConcurrencyResourceType: indica che è in esecuzione il backup di un database. Il valore massimo per questo tipo di risorsa è 1. Se sono stati richiesti più backup contemporaneamente, gli altri vengono accodati. 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 di attesa delle risorse da fornire. 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 DMV sys.dm_pdw_resource_waits per calcolare quanti slot di concorrenza sono stati 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();

L DMV sys.dm_pdw_wait_stats può essere usata per l'analisi della tendenza 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 ulteriori informazioni sulle classi di risorse più grandi che possono migliorare le qualità degli indici indice columnstore cluster, vedere Ricompilazione degli indici per migliorare la qualità del segmento.