Optimalizace pomocí jednofázového potvrzení a možné zařazení jednofázového oznámení
Toto téma popisuje mechanismy poskytované System.Transactions infrastruktury za účelem optimalizace výkonu.
Zařazení možné jedna fáze
System.Transactions Infrastruktury administrates transakcí v rámci jedné aplikační domény, který zahrnuje maximálně jeden prostředek trvalý nebo více těkavých zdrojů. Vzhledem k tomu System.Transactions infrastruktura používá volání pouze uvnitř aplikační domény, bude vrácen nejlepší propustnost a výkonu.
Nicméně, pokud transakce je k dispozici na jiný objekt v jiné doméně aplikace (včetně přes hranice procesu a strojově), ve stejném počítači, nebo pokud jste byli k zařazení jiného správce prostředků trvalý, System.Transactions infrastruktury automaticky eskaluje transakce jej lze spravovat pomocí příkaz MSDTC. Spravuje MSDTC transakcí není jako jedna spravuje performance-wise System.Transactions infrastruktury.
Za účelem optimalizace výkonu, System.Transactions možné jedné fáze zařazení (PSPE) umožňující na jeden vzdálený trvalý prostředek umístěný v různých aplikační domény, procesu nebo počítač, abyste se mohli účastnit v poskytuje infrastrukturu System.Transactions transakce, aniž by ji chcete-li být rozšířena na transakci MSDTC. Tento správce prostředků (SV) můžete hostovat a "vlastní" transakce, který lze později být rozšířena na distribuovaných transakcí (nebo transakce MSDTC) v případě potřeby. Tím omezíte možnost pomocí příkaz MSDTC.
Tento konkrétní správce prostředků má obvykle své vlastní interní nedistribuovaných transakcí a potřebuje podporovat převod těchto transakcí na distribuované transakce za běhu. SQL Server 2005 je například správce prostředků. V takovém případě System.Transactions infrastruktury přebírá roli pasivní Správa právě sledováním transakci pro potřebu eskalace. Pro podporu interakce mezi System.Transactions manager infrastruktury a prostředků, druhém musí implementovat rozhraní IPromotableSinglePhaseNotification.
EnlistPromotableSinglePhase Metoda se používá k zařazení jednoho trvalého prostředek, který lze později eskalován. Tato metoda zajišťuje, že zařazení může být eskalován podle potřeby. Pokud zařazení úspěšná, správce prostředků vytvoří jeho vnitřní transakci a přidruží ji k System.Transactions transakce. Pokud se nezdaří zařazení PSPE, by měl správce prostředků místo toho zařazení pomocí EnlistDurable metody. Selhání při zařazení v PSPE může dojít, když transakce je již distribuovaných transakcí, nebo když PSPE zařazení již provedl jiný správce prostředků
Jakmile je zapsán, volá klienty potvrzení nebo přerušení System.Transactions transakce jsou převedeny na volání na správce prostředků vyvoláním SinglePhaseCommit v případě metody nebo Rollback v uvedeném pořadí.
Pokud System.Transactions transakce nikdy vyžaduje eskalace, když je transakce potvrzeny, obdrží správce prostředků SinglePhaseCommit oznámení. Poté jej lze potvrďte interní transakce, která byla původně vytvořena.
Pokud System.Transactions transakce musí být eskalován (například pro podporu více RMs), System.Transactions oznámí správci prostředků voláním Promote metodu na ITransactionPromoter rozhraní, ze kterého IPromotableSinglePhaseNotification rozhraní je odvozena. Správce prostředků potom převede transakce interně z místní transakce (která nevyžaduje protokolování) transakce objekt, který je schopen účasti na transakci DTC a přidruží ji k práci prováděné. Při transakci je vyzván k potvrzení, správce transakcí stále odešle SinglePhaseCommit oznámení, aby správce zdrojů, který potvrdí distribuovaných transakcí, který je vytvořen při eskalace.
Poznámka:
Trasování TransactionCommitted (které jsou generovány při potvrzení vyvoláno v eskalované transakci) obsahují ID aktivity transakce DTC.
Další informace o eskalaci správy naleznete v tématu Eskalace správy transakcí.
Eskalace scénář pro správu transakce
Následující scénář ukazuje eskalaci distribuovaných transakcí pomocí System.Data oboru názvů jako proxy "server" pro správce prostředků. Tento scénář předpokládá, že již existuje jedna System.Data připojení k databázi, CN1, jejich zapojení do transakce a aplikace chce zahrnovat další System.Data připojení, CN2. Transakce musí být rozšířena na DTC, jako dvoufázového úplná distribuované transakce.
V tomto případě
Volání CN1 EnlistPromotableSinglePhase metodu za účelem zařadit do transakce. Potom transakce je stále místní a neexistují žádné další možné zařazení transakce, takže se EnlistPromotableSinglePhase volání úspěšné.
Při volání CN2 druhé připojení EnlistPromotableSinglePhase, volání selže, protože je potřebný další možné zařazení. Z tohoto důvodu musí CN2 získat transakci DTC, chcete-li předat SQL. Chcete-li to provést, používá jednu z metody poskytované TransactionInterop třídy a vytvořit formát transakce, která mohou být zadány SQL.
System.Transactions volá metodu Promote v ITransactionPromoter rozhraní implementovaném CN1.
V tomto okamžiku CN1 eskaluje transakce, pomocí některé mechanismus, které jsou specifické pro SQL 2005 a System.Data.
Návratová hodnota z Promote je metoda bajtové pole, který obsahuje token šíření hodnoty pro transakci. System.Transactions pomocí tohoto tokenu šíření vytvoří transakci DTC, kterou může začlenit do místní transakce.
V tomto okamžiku CN2 můžete použít data byla přijata z jedné z metod ve volání TransactionInterop mají být předány transakce SQL.
Nyní jak jsou uveden v transakci DTC distribuované.
Optimalizace potvrzení jedna fáze
Protokol jednofázového potvrzení je efektivnější za běhu, protože všechny aktualizace se provádějí bez explicitní koordinace. Chcete-li využít výhod této optimalizace, měli byste implementovat pomocí Správce prostředků ISinglePhaseNotification rozhraní pro daný prostředek a zařadit do transakce pomocí EnlistDurable nebo EnlistVolatile metody. Konkrétně by se měl parametr EnlistmentOptions rovnat None , aby se zajistilo, že se provede jednofázové potvrzení.
Vzhledem k tomu ISinglePhaseNotification rozhraní je odvozena z IEnlistmentNotification rozhraní, není-li váš správce prostředků nárok na jediné fázi potvrzení, pak může i nadále přijímat dvě fáze potvrzení oznámení. Pokud váš správce prostředků přijme SinglePhaseCommit oznámení ze Správce TM, by měl akci k provedení práce, které jsou nezbytné k potvrzení a odpovídajícím způsobem informovat správce transakcí, pokud má být potvrzena nebo vrácena zpět voláním transakce Committed, Aborted, nebo InDoubt metodu na SinglePhaseEnlistment parametru. Odpověď Done na zařazení v této fázi znamená sémantiku ReadOnly. Proto by neměl Odpovědět Done spolu s některou z ostatních metod.
Pokud existuje pouze jeden nestálý zařazení a žádný trvalý zařazení, těkavý zařazení obdrží oznámení SPC. Pokud existují nějaké nestálé zařazení a pouze jeden trvalý zařazení, nestálé zařazení obdrží 2PC. Po dokončení, trvalý zařazení obdrží certifikát SPC.