When I work with update conflict problem with SNAPSHOT Isolation Level, it seems that autocommit transactions use the isolation level used at last time.
Condition: ALLOW_SNAPSHOT_ISOLATION is ON, READ_COMMITTED_SNAPSHOT is OFF
Step 1 : Execute update statement without transaction
using (var sqlconn = new SqlConnection("Data source=..."))
using (var sqlcmd = sqlconn.CreateCommand())
{
sqlconn.Open();
sqlcmd.CommandText = "Update ..."
sqlcmd.ExecuteNonQuery();
}
Then I take a look in sys.md_exec_sessions
and found the transaction isolation level is READCOMMITTED
.
Step 2 : Execute update statement with transaction in SNAPSHOT isolation level
using (var sqlconn = new SqlConnection("Data source=..."))
{
sqlconn.Open();
using (var sqltran = sqlconn.BeginTransaction(IsolationLevel.Snapshot))
using (var sqlcmd = sqlconn.CreateCommand())
{
sqlconn.Open();
sqlcmd.CommandText = "Update ..."
sqlcmd.ExecuteNonQuery();
}
}
The isolation level is Snapshot
, works good.
Step 3 : do step 1 again
The isolation level is Snapshot
.
I expect step 3 shows READCOMMITTED
cause READ_COMMITTED_SNAPSHOT is OFF.
There is two ideas that I supposed, but I cannot conclude.
- dm_exec_sessions will not contains information about autocommit transactions
- autocommit transaction actually uses
SNAPSHOT
Any idea will be appreciated.
Thanks,