Escalatie van transactiebeheer
Windows fungeert als host voor een set services en modules die samen een transactiebeheerder vormen. Escalatie van transactiebeheer beschrijft het proces van het migreren van een transactie van een van de onderdelen van de transactiebeheerder naar een andere.
System.Transactions bevat een transaction manager-onderdeel dat een transactie coördineert met maximaal één duurzame resource of meerdere vluchtige resources. Omdat de transactiebeheerder alleen aanroepen binnen het toepassingsdomein gebruikt, levert dit de beste prestaties op. Ontwikkelaars hoeven niet rechtstreeks met de transactiebeheerder te communiceren. In plaats daarvan wordt een algemene infrastructuur die interfaces, gemeenschappelijk gedrag en helperklassen definieert, geleverd door de System.Transactions naamruimte.
Wanneer u de transactie wilt opgeven voor een object in een ander toepassingsdomein (inclusief proces- en computergrenzen) op dezelfde computer, escaleert de System.Transactions infrastructuur automatisch de transactie die wordt beheerd door de Microsoft Distributed Transaction Coordinator (MSDTC). De escalatie treedt ook op als u een andere duurzame resourcemanager inschakelt. Wanneer de transactie is geëscaleerd, blijft de transactie beheerd in de verhoogde status totdat deze is voltooid.
Tussen de System.Transactions transactie en MSDTC-transactie is er een intermediair type transactie beschikbaar gemaakt via de PSPE (Promotable Single Phase Enlistment). PSPE is een ander belangrijk mechanisme voor System.Transactions prestatieoptimalisatie. Hiermee kan een externe duurzame resource, die zich in een ander toepassingsdomein, een ander proces of een andere computer bevindt, deelnemen aan een System.Transactions transactie zonder dat deze wordt geëscaleerd naar een MSDTC-transactie. Zie Resources inschakelen als deelnemers aan een transactie voor meer informatie over PSPE.
Hoe escalatie wordt geïnitieerd
Transactie-escalatie vermindert de prestaties omdat de MSDTC zich in een afzonderlijk proces bevindt en het escaleren van een transactie naar de MSDTC resulteert in berichten die tijdens het proces worden verzonden. Om de prestaties te verbeteren, moet u de escalatie naar MSDTC vertragen of voorkomen; U moet dus weten hoe en wanneer de escalatie wordt gestart.
Zolang de System.Transactions infrastructuur vluchtige resources en maximaal één duurzame resource verwerkt die ondersteuning biedt voor meldingen in één fase, blijft de transactie eigendom van de System.Transactions infrastructuur. De transactiebeheerder maakt alleen gebruik van de resources die zich in hetzelfde toepassingsdomein bevinden en waarvoor logboekregistratie (het schrijven van het transactieresultaat naar schijf) niet vereist is. Een escalatie die ertoe leidt dat de System.Transactions infrastructuur het eigendom van de transactie overdraagt aan MSDTC wanneer:
Ten minste één duurzame resource die geen ondersteuning biedt voor meldingen met één fase, wordt in de transactie opgenomen.
Ten minste twee duurzame resources die ondersteuning bieden voor meldingen met één fase, worden opgenomen in de transactie. Als u bijvoorbeeld één verbinding met SQL Server 2005 inschakelt, wordt een transactie niet gepromoveerd. Wanneer u echter een tweede verbinding opent met een SQL Server 2005-database waardoor de database wordt opgenomen, detecteert de System.Transactions infrastructuur dat het de tweede duurzame resource in de transactie is en escaleert deze naar een MSDTC-transactie.
Een aanvraag om de transactie te 'marshal' naar een ander toepassingsdomein of een ander proces wordt aangeroepen. Bijvoorbeeld de serialisatie van het transactieobject over de grens van een toepassingsdomein. Het transactieobject is marshalled-by-value, wat betekent dat elke poging om het door te geven over een grens van een toepassingsdomein (zelfs in hetzelfde proces) resulteert in serialisatie van het transactieobject. U kunt de transactieobjecten doorgeven door een aanroep uit te voeren op een externe methode die een Transaction parameter gebruikt of u kunt proberen toegang te krijgen tot een extern transactioneel serviceonderdeel. Dit serialiseert het transactieobject en resulteert in een escalatie, zoals wanneer een transactie wordt geserialiseerd in een toepassingsdomein. Het wordt gedistribueerd en de lokale transactiebeheerder is niet meer toereikend.
De volgende tabel bevat alle mogelijke uitzonderingen die kunnen worden gegenereerd tijdens escalatie.
Uitzonderingstype | Conditie |
---|---|
InvalidOperationException | Een poging om een transactie te escaleren met isolatieniveau dat gelijk is aan Snapshot. |
TransactionAbortedException | De transactiemanager is niet beschikbaar. |
TransactionException | De escalatie mislukt en de toepassing wordt afgebroken. |