Jako u všech věcí souvisejících s výkonem, odpověď zní:záleží. Konkrétně to závisí na tom, jak přesně ovladač používáte.
Náklady na transakční interakci s databází se dělí zhruba na:režii na složitost kódu, režii komunikace, zpracování SQL a diskové I/O.
Komunikační režie se mezi případy XA a non-XA poněkud liší. Pokud jsou všechny ostatní stejné, transakce XA zde nese o něco vyšší náklady, protože vyžaduje více zpátečních cest do db. U transakce jiné než XA v režimu ručního potvrzení jsou náklady minimálně dvě volání:operace SQL a potvrzení. V případě XA je to start, sql operace, konec, příprava a potvrzení. Pro váš konkrétní případ použití, který se automaticky optimalizuje pro spuštění, operace SQL, ukončení, přípravu. Ne všechny hovory mají stejnou cenu:data přesunutá v sadě výsledků budou obvykle dominovat. V síti LAN nejsou náklady na další zpáteční cesty obvykle významné.
Všimněte si však, že na neopatrné číhají zajímavé nástrahy. Některé ovladače například nepodporují ukládání do mezipaměti připravených příkazů v režimu XA, což znamená, že použití XA s sebou nese přidanou režii opětovné analýzy SQL při každém volání nebo vyžaduje použití samostatného fondu příkazů nad ovladačem. Pokud jde o téma fondů, správné sdružování připojení XA je o něco složitější než sdružování jiných než XA, takže v závislosti na implementaci fondu připojení můžete zaznamenat mírný zásah i tam. Některé rámce ORM jsou zvláště zranitelné vůči režii sdružování připojení, pokud používají agresivní uvolnění připojení a znovu nabývají v rámci transakce. Je-li to možné, nakonfigurujte tak, aby uchopilo a podrželo připojení po celou dobu životnosti tx namísto opakovaného zásahu do fondu.
S výše zmíněným upozorněním týkajícím se ukládání připravených příkazů do mezipaměti neexistuje žádný podstatný rozdíl v nákladech na zpracování SQL mezi XA a non-XA tx. Existuje však malý rozdíl ve využití prostředků na serveru db:v některých případech může být možné, že server uvolní prostředky dříve v případě jiného typu než XA. Transakce jsou však obvykle dostatečně krátké na to, aby to nepředstavovalo významnou úvahu.
Nyní uvažujeme režii diskových I/O. Zde se zabýváme vstupy/výstupy způsobenými protokolem XA spíše než SQL používaným pro obchodní logiku, protože ta je v obou případech nezměněna. U transakcí pouze pro čtení je situace jednoduchá:rozumný správce db a TX nebude provádět žádné zápisy do protokolu, takže nevzniká žádná režie. Totéž platí pro případy zápisu, kde je db jediným zapojeným zdrojem, kvůli jednofázové optimalizaci potvrzení XA. V případě 2PC potřebuje každý db server nebo jiný správce prostředků dva zápisy na disk namísto toho, který se používá v případech jiných než XA, a správce TX rovněž potřebuje dva. Díky pomalosti diskového úložiště je to dominantní zdroj režie výkonu v XA vs. non-XA.
O několik odstavců zpět jsem zmínil složitost kódu. XA vyžaduje o něco více provádění kódu než non-XA. Ve většině případů je složitost pohřbena ve správci transakcí, i když samozřejmě můžete XA řídit přímo, pokud chcete. Náklady jsou většinou triviální, s výhradou již zmíněných výhrad. Pokud nepoužíváte obzvlášť špatného správce transakcí, v takovém případě můžete mít problém. Případ pouze pro čtení je obzvláště zajímavý – poskytovatelé správců transakcí obvykle vkládají své úsilí optimalizace do kódu I/O disku, zatímco spor o zámek je významnějším problémem pro případy použití pouze pro čtení, zejména na vysoce souběžných systémech.
Všimněte si také, že složitost kódu ve správci TX je v architekturách obsahujících aplikační server nebo jiného standardního poskytovatele transakčního správce něco jako červený sleď, protože tyto obvykle používají téměř stejný kód pro koordinaci transakcí XA a non-XA. V případech jiných než XA, abyste úplně vynechali správce TX, musíte obvykle říci aplikačnímu serveru/rámci, aby s připojením nakládal jako s netransakčním, a poté provést potvrzení přímo pomocí JDBC.
Tedy shrnutí je:Náklady na vaše dotazy sql budou dominovat času transakce pouze pro čtení bez ohledu na volbu XA/non-XA , pokud něco nepokazíte v konfiguraci nebo neprovedete zvlášť triviální operace SQL v každém TX, což je znamení, že vaše obchodní logika by pravděpodobně mohla použít nějakou restrukturalizaci ke změně poměru režie TX Management k obchodní logice v každém TX.
Pro případy pouze pro čtení proto platí obvyklá rada agnostika transakčního protokolu:zvažte raději mezipaměť druhé úrovně s vědomím transakcí v řešení ORM, než pokaždé zasáhnout DB. Pokud se tak nestane, vylaďte sql a poté zvyšte mezipaměť vyrovnávací paměti db, dokud neuvidíte 90% a více zásahů nebo nevyčerpáte sloty RAM serveru, podle toho, co nastane dříve. Dělejte si starosti s XA vs. non-XA, jakmile to uděláte a zjistíte, že věci jsou stále příliš pomalé.