トランザクションの昇格Transaction Promotion

適用対象: はいSQL Server いいえAzure SQL Database いいえAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server NoAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

トランザクションの昇格は、必要に応じて完全に再頒布可能なトランザクションに自動的に昇格できる、軽量のローカルトランザクションを記述します。Transaction promotion describes a lightweight, local transaction that can be automatically promoted to a fully distributable transaction as needed. サーバー側で実行されているデータベース トランザクション内でマネージド ストアド プロシージャが呼び出されると、CLR (共通言語ランタイム) コードはローカル トランザクションのコンテキストで実行されます。When a managed stored procedure is invoked within a database transaction on the server, the common language runtime (CLR) code is run in the context of a local transaction. データベース トランザクション内でリモート サーバーへの接続が開かれると、リモート サーバーへの接続が分散トランザクションに参加し、ローカル トランザクションは自動的に分散トランザクションに昇格します。If a connection to a remote server is opened within a database transaction, the connection to the remote server is enlisted into the distributed transaction and the local transaction is automatically promoted to a distributed transaction. トランザクションの昇格では、必要になるまで分散トランザクションの作成を遅延し、分散トランザクションのオーバーヘッドを最小限に抑えます。So, transaction promotion minimizes the overhead of distributed transactions by deferring the creation of a distributed transaction until it is needed. トランザクションの昇格は、参加キーワードを使用して有効になっている場合は自動的に行われ、開発者からの介入は必要ありません。Transaction promotion is automatic, if it has been enabled using the Enlist keyword, and does not require intervention from the developer. SQL ServerSQL Server .NET Framework Data Provider は 、.NET Framework のsystem.string 名前空間のクラスを使用して処理されるトランザクションの昇格をサポートしています。The .NET Framework Data Provider for SQL ServerSQL Server provides support for transaction promotion, handled through the classes in the .NET Framework System.Data.SqlClient namespace.

参加キーワードThe Enlist Keyword

SqlConnectionオブジェクトのConnectionStringプロパティでは、参加キーワードがサポートされています。 これは、system.string がトランザクションコンテキストを検出し、分散トランザクションに接続を自動的に参加させるかどうかを示します。The ConnectionString property of a SqlConnection object supports the Enlist keyword, which indicates whether System.Data.SqlClient detects transactional contexts and automatically enlists the connection in a distributed transaction. このキーワードが true に設定されている場合 (既定の設定)、開かれているスレッドの現在のトランザクション コンテキストに接続が自動参加します。If this keyword is set to true (the default), the connection is automatically enlisted in the current transaction context of the opening thread. このキーワードが false に設定されている場合、SqlClient 接続は分散トランザクションとのやり取りを行いません。If this keyword is set to false, the SqlClient connection does not interact with a distributed transaction. 接続文字列で [参加] が指定されていない場合、接続が開かれたときに接続が検出されると、分散トランザクションに接続が自動的に参加します。If Enlist is not specified in the connection string, the connection is automatically enlisted in a distributed transaction if one is detected at the time the connection is opened.

分散トランザクションDistributed Transactions

通常、分散トランザクションでは、大量のシステム リソースが消費されます。Distributed transactions typically consume significant system resources. MicrosoftMicrosoft 分散トランザクション コーディネーター (MS DTC) では、分散トランザクションを管理し、それらのトランザクションでアクセスされているすべてのリソース マネージャーを統合します。MicrosoftMicrosoft Distributed Transaction Coordinator (MS DTC) manages such transactions, and integrates all of the resource managers accessed in these transactions. 一方、トランザクションの昇格は、特殊な形式のシステムトランザクショントランザクションです。これにより、作業を効率的に単純SQL ServerSQL Serverなトランザクションに代行させることができます。Transaction promotion, on the other hand, is a special form of a System.Transactions transaction that effectively delegates the work to a simple SQL ServerSQL Server transaction. トランザクションの処理に関連する作業を調整SQL ServerSQL Server、必要に応じて完全な分散トランザクションに昇格させます。System.Transactions, System.Data.SqlClient, and SQL ServerSQL Server coordinate the work involved in handling the transaction, promoting it to a full distributed transaction as needed.

トランザクションの昇格を使用する利点は、アクティブなTransactionScopeトランザクションで接続を開いたときに、他の接続が開かれていない場合に、完全な分散トランザクションのオーバーヘッドを増やすのではなく、トランザクションが軽量トランザクションとしてコミットされることです。The benefit of using transaction promotion is that when a connection is opened with an active TransactionScope transaction, and no other connections are opened, the transaction commits as a lightweight transaction, rather than incurring the additional overhead of a full distributed transaction. TransactionScopeの詳細については、「 Usingsystem.string」を参照してください。For more information about TransactionScope, see Using System.Transactions.

参照See Also

CLR 統合とトランザクションCLR Integration and Transactions