Aracılığıyla paylaş


Azure Synapse Analytics'te ayrılmış SQL havuzu için iş yükünüzü analiz etme

Azure Synapse Analytics'te ayrılmış SQL havuzu iş yükünüzü analiz etme teknikleri.

Kaynak Sınıfları

Ayrılmış SQL havuzu, sorgulara sistem kaynakları atamak için kaynak sınıfları sağlar. Kaynak sınıfları hakkında daha fazla bilgi için bkz . Kaynak sınıfları ve iş yükü yönetimi. Sorguya atanan kaynak sınıfının şu anda kullanılabilir olandan daha fazla kaynağa ihtiyacı varsa sorgular bekler.

Kuyruğa alınan sorgu algılama ve diğer DMV'ler

Eşzamanlılık kuyruğunda sys.dm_pdw_exec_requests bekleyen sorguları belirlemek için DMV'yi kullanabilirsiniz. Eşzamanlılık yuvası bekleyen sorguların durumu askıya alındı.

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
;

İş yükü yönetimi rolleri ile sys.database_principalsgörüntülenebilir.

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şağıdaki sorgu, her kullanıcının hangi role atandığı gösterir.

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

Ayrılmış SQL havuzu aşağıdaki bekleme türlerine sahiptir:

  • LocalQueriesConcurrencyResourceType: Eşzamanlılık yuvası çerçevesinin dışında duran sorgular. DMV sorguları ve gibi SELECT @@VERSION sistem işlevleri, yerel sorgulara örnek olarak verilebilir.
  • UserConcurrencyResourceType: Eşzamanlılık yuvası çerçevesi içinde yer alan sorgular. Son kullanıcı tablolarındaki sorgular, bu kaynak türünü kullanacak örnekleri temsil eder.
  • DmsConcurrencyResourceType: Veri taşıma işlemlerinden kaynaklanan beklemeler.
  • BackupConcurrencyResourceType: Bu bekleme, veritabanının yedeklendiğini gösterir. Bu kaynak türü için en yüksek değer 1'dir. Aynı anda birden çok yedekleme istendiyse, diğerleri sıraya alınır. Genel olarak, 10 dakikalık ardışık anlık görüntüler arasında en az bir süre öneririz.

DMV sys.dm_pdw_waits , isteğin hangi kaynakları beklediğini görmek için kullanılabilir.

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 DMV, belirli bir sorgunun bekleme bilgilerini gösterir. Kaynak bekleme süresi, kaynakların sağlanmasını bekleyen süreyi ölçer. Sinyal bekleme süresi, temel sql sunucularının sorguyu CPU'ya zamanlaması için geçen süredir.

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'yi sys.dm_pdw_resource_waits kaç eşzamanlılık yuvası verildiğini hesaplamak için de kullanabilirsiniz.

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 DMV, beklemelerin geçmiş eğilim analizi için kullanılabilir.

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;

Sonraki adımlar

Veritabanı kullanıcılarını ve güvenliğini yönetme hakkında daha fazla bilgi için bkz . Ayrılmış SQL havuzunun (eski adı SQL DW) güvenliğini sağlama. Daha büyük kaynak sınıflarının kümelenmiş columnstore dizin kalitesini nasıl geliştirebileceği hakkında daha fazla bilgi için bkz . Segment kalitesini geliştirmek için dizinleri yeniden oluşturma.