Delegated Commit Optimization

MS DTC permits commit coordinator responsibility to be delegated from the coordinating transaction manager to one of its subordinate transaction managers or resource managers. Commit coordinator delegation occurs when the coordinating transaction manager detects that only one subordinate resource manager or transaction manager is enlisted in the transaction.

The coordinating transaction manager delegates commit coordinator responsibility to the resource manager when both of the following two conditions are True:

  1. No subordinate transaction manager is enlisted in the transaction.
  2. Only one resource manager is enlisted in the transaction.

In this case, the coordinating transaction manager sets fSinglePhase when invoking the ITransactionResourceAsync::PrepareRequest method at phase one. This instructs the resource manager that it should act as the transaction coordinator.

MS DTC delegates commit coordinator responsibility to the subordinate transaction manager when both of the following two conditions are True:

  1. No resource manager is enlisted in the transaction with the current coordinating transaction manager.
  2. Only one subordinate transaction manager is enlisted in the transaction.

In this case, the coordinating transaction manager sends a “delegated commit” message in place of the phase one message. The “delegated commit” message transfers commit coordinator responsibility from the current coordinating transaction manager to its subordinate transaction manager. This optimization is applied recursively. A transaction manager that receives commit coordinator responsibility may delegate commit coordinator responsibility to its subordinate transaction manager or resource manager.