SQL Server

CURRENT_TRANSACTION_ID()

CURRENT_TRANSACTION_ID() je nenápadná, ale nadmíru užitečná funkce, která přichází v SQL Serveru 2016 a umožňuje nám zjistit, jaké číslo má aktuální transakce v určitém připojení (session). Před SQL Serverem 2016 bylo možné stejnou informaci zjistit ze systémového pohledu sys.dm_tran_current_transaction a můžeme tak činit i nadále, ale skalární návratová hodnota nové funkce je přeci jen poněkud praktičtější.

Použití funkce CURRENT_TRANSACTION_ID() je jednoduché:

BEGIN TRAN

	SELECT CURRENT_TRANSACTION_ID() AS transaction_id;  

	SELECT * FROM sys.dm_tran_current_transaction

ROLLBACK
GO

current_transaction_id_example1

Funkce vrací číslo aktuální transakce, které je jejím unikátním identifikátorem a můžeme je dále využít například pro dohledání detailů v záznamech z trace nebo Extended Events. Výhodné je to zejména v případě, pokud spravujeme databázi, která je od aplikace oddělena ORM vrstvou a potřebujeme dát do vztahu zachycený databázový provoz s jednotlivými transakcemi aplikace. Pak není nic jednoduššího, než aby aplikace po zahájení transakce zavolala funkci CURRENT_TRANSACTION_ID() a uložila vrácené číslo transakce do svých logů, kde ho později můžeme dohledat v rámci podrobnější analýzy.

Důležité je nezapomenout, že pokud budeme CURRENT_TRANSACTION_ID() volat mimo kontext BEGIN TRAN (explicitní transakce), je samo volání CURRENT_TRANSACTION_ID() bráno jako implicitní transakce a budeme získávat při každém volání vyšší číslo, ale nikoliv nutně vždy o jedna, protože mezi našimi voláními získávají svá pořadová čísla i všechny další transakce v rámci instance.

Leave a Reply

Your email address will not be published. Required fields are marked *