sys.dm_tran_current_transaction (Transact-SQL)

適用対象:yesSQL Server (サポートされているすべてのバージョン) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

現在のセッションのトランザクションの状態情報を表示する 1 行を返します。

Note

Azure Synapse Analytics または Analytics Platform System (PDW) からこれを呼び出すには、sys.dm_pdw_nodes_tran_current_transactionという名前を使用します。 この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。

構文

  
sys.dm_tran_current_transaction  

返されるテーブル

列名 データ型 説明
transaction_id bigint 現在のスナップショットのトランザクション ID。
transaction_sequence_num bigint レコード バージョンを生成するトランザクションのシーケンス番号。
transaction_is_snapshot bit スナップショット分離の状態。 トランザクションがスナップショット分離に基づいて開始された場合、この値は 1 です。 それ以外の場合、値は 0 です。
first_snapshot_sequence_num bigint スナップショットの作成時にアクティブだったトランザクションの最小トランザクション シーケンス番号。 実行時に、スナップショット トランザクションは、その時点でアクティブなすべてのトランザクションのスナップショットを取得します。 非スナップショット トランザクションの場合、この列には 0 が表示されます。
last_transaction_sequence_num bigint グローバル シーケンス番号。 この値は、システムにより生成された最後のトランザクション シーケンス番号を表します。
first_useful_sequence_num bigint グローバル シーケンス番号。 この値は、行バージョンをバージョン ストアに保持する必要があるトランザクションの、最も古いトランザクション シーケンス番号を表します。 以前のトランザクションによって作成された行バージョンは削除できます。
pdw_node_id int 適用対象: Azure Synapse Analytics、Analytics Platform System (PDW)

このディストリビューションがオンになっているノードの識別子。

アクセス許可

SQL Server と SQL Managed Instance では、VIEW SERVER STATE アクセス許可が必要です。

SQL Database BasicS0、および S1 のサービス目標、およびエラスティック プール内のデータベースの場合、サーバー管理者アカウント、Azure Active Directory 管理者アカウント、または ##MS_ServerStateReader##サーバー ロールのメンバーシップが必要です。 他のすべての SQL Database サービス目標では、データベースに対する VIEW DATABASE STATE アクセス許可または ##MS_ServerStateReader## サーバー ロールのメンバーシップのいずれかが必要です。

次の例では、4 つの同時実行トランザクションが存在するテスト シナリオを使用します。これらのトランザクションはそれぞれトランザクション シーケンス番号 (XSN) で識別され、ALLOW_SNAPSHOT_ISOLATION オプションと READ_COMMITTED_SNAPSHOT オプションが ON に設定されているデータベース内で実行されます。 実行されるトランザクションは次のとおりです。

  • XSN-57。SERIALIZABLE 分離での更新操作です。

  • XSN-58 は XSN-57 と同じです。

  • XSN-59 は、スナップショット分離での選択操作です。

  • XSN-60 は XSN-59 と同じです。

次のクエリは、各トランザクションのスコープ内で実行されます。

SELECT   
    transaction_id  
   ,transaction_sequence_num  
   ,transaction_is_snapshot  
   ,first_snapshot_sequence_num  
   ,last_transaction_sequence_num  
   ,first_useful_sequence_num  
  FROM sys.dm_tran_current_transaction;  

XSN-59 の結果を次に示します。

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9387                 59                       1                         
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
57                               61                        
  
first_useful_sequence_num  
-------------------------  
57  

出力は、XSN-59 が XSN-59 の開始時にアクティブだった最初のトランザクションとして XSN-57 を使用するスナップショット トランザクションであることを示しています。 つまり、XSN-59 では、トランザクション シーケンス番号が XSN-57 より低いトランザクションによってコミットされたデータが読み取られます。

XSN-57 の結果を次に示します。

transaction_id       transaction_sequence_num transaction_is_snapshot  
-------------------- ------------------------ -----------------------  
9295                 57                       0  
  
first_snapshot_sequence_num last_transaction_sequence_num  
--------------------------- -----------------------------  
NULL                        61  
  
first_useful_sequence_num  
-------------------------  
57  

XSN-57 はスナップショット トランザクションではないので、 first_snapshot_sequence_numNULL

参照

動的管理ビューと動的関数 (Transact-SQL)
トランザクション関連の動的管理ビューおよび関数 (Transact-SQL)