Azure Synapse Analytics で専用 SQL プールのワークロードを分析する

Tip

Microsoft Fabric Data Warehouse は、将来のアーキテクチャ、組み込みの AI、および新機能を備えた、Data Lake 基盤上のエンタープライズ 規模のリレーショナル ウェアハウスです。 データ ウェアハウスを初めて使用する場合は、Fabric Data Warehouseから始めます。 既存の dedicated SQL プール ワークロードは、Fabric にアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。

Azure Synapse Analytics で専用 SQL プール ワークロードを分析するための手法。

リソース クラス

専用 SQL プールには、システム リソースをクエリに割り当てるリソース クラスが用意されています。 リソース クラスの詳細については、「リソース クラスとワークロード管理」を参照してください。 クエリに割り当てられているリソース クラスに現在使用できるリソースよりも多くのリソースが必要な場合、クエリは待機します。

キューに配置されたクエリの検出とその他の DMV

sys.dm_pdw_exec_requests DMV を使用して、コンカレンシー キューで待機しているクエリを識別できます。 コンカレンシー スロットを待機しているクエリは、中断状態になります。

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: コンカレンシー スロット フレームワークの外部にあるクエリ。 DMV クエリと SELECT @@VERSION などのシステム関数は、ローカル クエリの例です。
  • UserConcurrencyResourceType: コンカレンシー スロット フレームワーク内にあるクエリ。 エンド ユーザー テーブルに対するクエリは、このリソースの種類を使用する例を表します。
  • DmsConcurrencyResourceType: データ移動操作の結果として待機します。
  • BackupConcurrencyResourceType: この待機は、データベースがバックアップされていることを示します。 このリソースの種類の最大値は 1 です。 複数のバックアップが同時に要求された場合は、他のバックアップがキューに入ります。 一般に、連続するスナップショットの間の最小時間は 10 分にすることをお勧めします。

sys.dm_pdw_waits DMV を使用して、要求が待機しているリソースを確認できます。

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 には、特定のクエリの待機情報が表示されます。 リソース待機時間は、リソースが提供されるのを待つ時間を測定します。 シグナル待機時間は、基になる SQL サーバーが 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();

また、 sys.dm_pdw_resource_waits DMV を使用して、許可されたコンカレンシー スロットの数を計算することもできます。

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 は、待機の履歴傾向分析に使用できます。

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 DW) をセキュリティで保護する」を参照してください。 大規模なリソース クラスでクラスター化列ストア インデックスの品質を向上させる方法の詳細については、「 インデックスを再構築してセグメントの品質を向上させる」を参照してください。