Analise sua carga de trabalho para pool SQL dedicado no Azure Synapse Analytics

Técnicas para analisar sua carga de trabalho dedicada do pool SQL no Azure Synapse Analytics.

Classes de recursos

O pool SQL dedicado fornece classes de recursos para atribuir recursos do sistema a consultas. Para obter mais informações sobre classes de recursos, consulte Classes de recursos & gerenciamento de carga de trabalho. As consultas aguardarão se a classe de recurso atribuída a uma consulta precisar de mais recursos do que os atualmente disponíveis.

Deteção de consultas em fila e outros DMVs

Você pode usar o sys.dm_pdw_exec_requests Detran para identificar consultas que estão aguardando em uma fila de simultaneidade. As consultas que aguardam um slot de simultaneidade têm o status de suspensas.

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
;

As funções de gerenciamento de carga de trabalho podem ser visualizadas com 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
;

A consulta a seguir mostra a qual função cada usuário está atribuído.

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

O pool SQL dedicado tem os seguintes tipos de espera:

  • LocalQueriesConcurrencyResourceType: consultas que ficam fora da estrutura do slot de simultaneidade. Consultas do Detran e funções do sistema, como SELECT @@VERSION exemplos de consultas locais.
  • UserConcurrencyResourceType: consultas que ficam dentro da estrutura do slot de simultaneidade. As consultas em tabelas de usuário final representam exemplos que usariam esse tipo de recurso.
  • DmsConcurrencyResourceType: Aguarda resultado de operações de movimentação de dados.
  • BackupConcurrencyResourceType: Esta espera indica que está sendo feito backup de um banco de dados. O valor máximo para este tipo de recurso é 1. Se vários backups tiverem sido solicitados ao mesmo tempo, os outros serão enfileirados. Em geral, recomendamos um tempo mínimo entre instantâneos consecutivos de 10 minutos.

O sys.dm_pdw_waits Detran pode ser usado para ver quais recursos uma solicitação está esperando.

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

O sys.dm_pdw_resource_waits Detran mostra as informações de espera para uma determinada consulta. O tempo de espera de recursos mede o tempo de espera para que os recursos sejam fornecidos. O tempo de espera de sinal é o tempo que os servidores SQL subjacentes levam para agendar a consulta na 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();

Você também pode usar o sys.dm_pdw_resource_waits Detran para calcular quantos slots de simultaneidade foram concedidos.

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

O sys.dm_pdw_wait_stats Detran pode ser usado para análise de tendências históricas de esperas.

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;

Próximos passos

Para obter mais informações sobre como gerenciar usuários de banco de dados e segurança, consulte Proteger um pool SQL dedicado (anteriormente SQL DW). Para obter mais informações sobre como classes de recursos maiores podem melhorar a qualidade do índice columnstore clusterizado, consulte Reconstruindo índices para melhorar a qualidade do segmento.