Azure Synapse Analyticsにおいてのブロッキング発生の確認

IT

はじめに

SQL Serverとは違い、Azure Synapse Analyticsのロック動作では、すべてテーブルレベル以上で動作します。

Azure Synapse Analytics ロックはすべて、テーブル レベル以上になります。 ロックをかけると、ロックを要求したトランザクションにとって問題になるようなリソースの変更が行われないように、他のトランザクションがブロックされます。

引用:トランザクション (Azure Synapse Analytics) – SQL Server | Microsoft Docs

Azure Synapse Analyticsでは下記4つのロックモードがサポートされています。

  • 排他的
  • 共有
  • ExclusiveUpdate
  • SharedUpdate

そこで本記事では4つのロックモードがどの処理、及びどのレベルで発生しているのか確認する方法について解説していきます。

結論

結論から言うと、下記Transact-SQLで確認が可能です。

  • sys.dm_pdw_waits
  • sys.dm_pdw_exec_requests

ブロッキング発生の確認

ブロッキング発生

まずは下記手順に従い、ブロッキングを発生させます。

SQL Server Management Studio (SSMS)などのツールからサーバにログインします。

対象のデータベースに対してクエリ実行します。

※今回は例としてDelete文を実行します。またBEGIN TRANSACTIONを明示的に指定することでブロッキングを発生させています。

BEGIN TRANSACTION

DELETE FROM myTable;

新しいセッションを開き、同様にクエリ実行を実行します。

BEGIN TRANSACTION

DELETE FROM myTable;

下記クエリを実行し、ブロックしているクエリとセッションの確認

select top 100 A.request_id as WaitingRequestId,

A.object_type as LockRequestType,

A.object_name as ObjectLockRequestName,

A.request_time as ObjectLockRequestTime,

B.session_id as BlockingSessionId,

B.request_id as BlockingRequestId

from sys.dm_pdw_waits A, sys.dm_pdw_waits B

where A.object_type = B.object_type and A.object_name = B.object_name and A.state = ‘Queued’ and B.state = ‘Granted’

order by ObjectLockRequestTime asc

上記クエリで確認したQID またはSID よりブロックしているクエリまたはセッションの内容を確認 ※[command]列からクエリの内容を確認出来ます。

select * from sys.dm_pdw_exec_requests where request_id in (‘QID51304‘)

ロックモード及び、ロック発生レベルの確認 ※[type]列からロックモードの確認、[object_type]列からロック発生レベル確認を確認できます。

select * from sys.dm_pdw_waits

まとめ

本記事では4つのロックモードがどの処理、及びどのレベルで発生しているのか確認する方法について解説しました。

下記Transact-SQLで確認が可能です。

  • sys.dm_pdw_waits
  • sys.dm_pdw_exec_requests

参考

参考情報:sys.dm_pdw_waits (Transact-SQL) – SQL Server | Microsoft Docs

参考情報: sys.dm_pdw_exec_requests (Transact-SQL) – SQL Server | Microsoft Docs