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.