patternsqlMinor
catch and understand transaction rollback
Viewed 0 times
rollbackcatchunderstandtransactionand
Problem
Because of the data consistency issue of the application (sporadic data loss) I have to perform a deep dive into transaction handling.
I've created an extended event session:
Now I get a lot of DUI statements shown in this ext-event session, all of them are in autocommit mode but there is no one error message. No key violation, no wrong syntax or something giving me an idea why transaction was rolled back. I've checked transac
I've created an extended event session:
CREATE EVENT SESSION [system_rollback_error] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
package0.event_sequence,
sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.server_principal_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text,
sqlserver.transaction_id,
sqlserver.transaction_sequence
)
WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4))
AND [severity]>(10))),
ADD EVENT sqlserver.sql_transaction(
ACTION(
package0.event_sequence,
sqlserver.client_app_name,
sqlserver.client_hostname,
sqlserver.database_id,
sqlserver.database_name,
sqlserver.server_principal_name,
sqlserver.session_id,
sqlserver.session_nt_username,
sqlserver.sql_text,
sqlserver.transaction_id,
sqlserver.transaction_sequence
)
WHERE ([package0].[greater_than_uint64]([sqlserver].[database_id],(4))
AND [transaction_state]='Rollback'
AND [transaction_type]='System'))
ADD TARGET package0.event_file(
SET filename=N'system_rollback_error',
max_file_size=(100)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
MAX_EVENT_SIZE=0 KB,
MEMORY_PARTITION_MODE=NONE,
TRACK_CAUSALITY=OFF,
STARTUP_STATE=OFF
)
GONow I get a lot of DUI statements shown in this ext-event session, all of them are in autocommit mode but there is no one error message. No key violation, no wrong syntax or something giving me an idea why transaction was rolled back. I've checked transac
Solution
Do you have an idea, why an autocommit transaction has a transaction_state "Rollback" with no errors?
The client can abort a running batch by sending an "attention". This is how you cancel a running query in SSMS, and this is how timeouts work.
You can add the
The client can abort a running batch by sending an "attention". This is how you cancel a running query in SSMS, and this is how timeouts work.
You can add the
sqlserver.attention event to your trace, egCREATE EVENT SESSION [attentions] ON SERVER
ADD EVENT sqlserver.attention(
ACTION(sqlserver.sql_text))Code Snippets
CREATE EVENT SESSION [attentions] ON SERVER
ADD EVENT sqlserver.attention(
ACTION(sqlserver.sql_text))Context
StackExchange Database Administrators Q#307687, answer score: 6
Revisions (0)
No revisions yet.