Анализ рабочей нагрузки для выделенного пула SQL в Azure Synapse Analytics
Методы анализа рабочей нагрузки для выделенного пула SQL в Azure Synapse Analytics.
Классы ресурсов
Выделенный пул SQL предоставляет классы ресурсов для назначения запросам системных ресурсов. Дополнительные сведения см. в разделе Классы ресурсов и управление рабочей нагрузкой. Запросы будут ставиться в очередь, если для класса ресурсов, назначенного запросу, требуется больше ресурсов, чем доступно в данный момент.
Представление, используемое для определения запросов, поставленных в очередь, и другие динамические административные представления
Определить запросы, попавшие в очередь параллельной обработки, можно с помощью динамического административного представления sys.dm_pdw_exec_requests
. Запросы, ожидающие выделения слота параллелизма, находятся в приостановленномсостоянии.
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
;
Чтобы просмотреть роли управления рабочей нагрузкой, можно использовать представление 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
;
Следующий запрос позволяет определить, в какие роли добавлены пользователи.
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')
;
В выделенном пуле SQL предусмотрены следующие типы ожиданий.
- LocalQueriesConcurrencyResourceTypeотносится к запросам, которые не входят в платформу слотов выдачи. В качестве примеров таких запросов можно привести запросы и системные функции динамических административных представлений, такие как
SELECT @@VERSION
. - UserConcurrencyResourceTypeотносится к запросам, которые входят в платформу слотов выдачи. В качестве примеров использования этого типа ресурсов можно привести запросы к таблицам пользователя.
- DmsConcurrencyResourceTypeотносится к ожиданиям, связанным с операциями перемещения данных.
- BackupConcurrencyResourceTypeможет использоваться при создании резервной копии базы данных. Максимальное значение для этого типа ресурсов равно 1. При одновременном запросе сразу нескольких резервных копий все остальные запросы помещаются в очередь. В общем рекомендуется подождать не менее 10 минут для создания следующего моментального снимка.
Определить, какие ресурсы необходимы для запроса, можно при помощи динамического административного представления sys.dm_pdw_waits
.
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();
В динамическом административном представлении sys.dm_pdw_resource_waits
отображаются сведения о времени ожидания для заданного запроса. Время ожидания ресурсов представляет собой время ожидания предоставления ресурсов. Время ожидания сигнала — это время, которое требуется базовым серверам SQL, чтобы запланировать передачу запроса процессору.
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();
Вы также можете использовать DMV sys.dm_pdw_resource_waits
, чтобы вычислить, сколько слотов выдачи было предоставлено.
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();
Для анализа тенденций времени ожидания за прошедший период используется динамическое административное представление sys.dm_pdw_wait_stats
.
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;
Следующие шаги
Дополнительные сведения об управлении пользователями и безопасностью базы данных см. в статье Защита выделенного пула SQL (ранее — хранилища данных SQL). Дополнительные сведения о повышении качества кластеризованных индексов columnstore за счет повышения класса ресурсов см. в разделе Повышение качества сегментов за счет перестроения индексов.