Compartir vía


Análisis de la carga de trabajo para el grupo de SQL dedicado en Azure Synapse Analytics

Técnicas para analizar la carga de trabajo del grupo de SQL dedicado en Azure Synapse Analytics.

Clases de recursos

El grupo de SQL dedicado proporciona clases de recursos para asignar recursos del sistema a consultas. Para obtener más información sobre las clases de recursos, consulte Clases de recursos y administración de cargas de trabajo. Las consultas esperarán si la clase de recurso asignada a una consulta necesita más recursos de los que están disponibles actualmente.

Detección de consulta en cola y otras DMV

Puede usar la DMV sys.dm_pdw_exec_requests para identificar las consultas que están a la espera en una cola de simultaneidad. Las consultas que esperan un espacio de simultaneidad tendrán el estado de suspendido.

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
;

Los roles de gestión de carga de trabajo se pueden ver 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
;

En la consulta siguiente se muestra a qué rol se asigna cada usuario.

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

El grupo de SQL dedicado tiene los siguientes tipos de espera:

  • LocalQueriesConcurrencyResourceType: consultas que se encuentran fuera del marco de slots de concurrencia. Las consultas de DMV y las funciones del sistema como SELECT @@VERSION son ejemplos de consultas locales.
  • UserConcurrencyResourceType: consultas que se encuentran dentro del marco de slots de concurrencia. Las consultas en tablas de usuario final representan ejemplos que usarían este tipo de recurso.
  • DmsConcurrencyResourceType: esperas resultantes de operaciones de movimiento de datos.
  • BackupConcurrencyResourceType: esta espera indica que se está realizando una copia de seguridad de una base de datos. El valor máximo de este tipo de recurso es 1. Si se han solicitado varias copias de seguridad al mismo tiempo, las demás se ponen en cola. En general, se recomienda un tiempo mínimo entre instantáneas consecutivas de 10 minutos.

La sys.dm_pdw_waits DMV se puede usar para ver qué recursos está esperando una solicitud.

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 DMV sys.dm_pdw_resource_waits muestra la información de espera para una consulta determinada. El tiempo de espera de recursos mide el tiempo que se espera a que se proporcionen los recursos. El tiempo de espera de señal es el tiempo que tardan los servidores SQL server subyacentes en programar la consulta en la 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();

También puede usar la DMW sys.dm_pdw_resource_waits para calcular cuántas ranuras de simultaneidad se han concedido.

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 DMV sys.dm_pdw_wait_stats se puede utilizar para analizar las tendencias históricas de las 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;

Pasos siguientes

Para obtener más información sobre la administración de usuarios y seguridad de bases de datos, consulte Protección de un grupo de SQL dedicado (anteriormente SQL DW). Para obtener más información sobre cómo las clases de recursos más grandes pueden mejorar la calidad del índice de almacén de columnas agrupado, consulte Recompilación de índices para mejorar la calidad del segmento.