2

シリアル化可能なトランザクションを作成する次のコードがあります。アプリケーションは期待どおりに動作します。

using (var tx = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.Serializable, Timeout = new TimeSpan(0, 2, 0) }))
{
  // Modify database using EF.
  tx.Complete();
}

ただし、データベースのプロファイルを作成すると、混乱が生じます。

// Start of transaction (and the first query). Login has invalid ISO LEV.
Audit Login       ... set transaction isolation level read committed ...
SQLTransaction    0 - Begin
RPC:Completed     exec sp_executesql N'SELECT TOP (1)... 

// Second query in transaction. Login now has valid ISO LEV.
Audit Logout
RPC:Completed     exec sp_reset_connection
Audit Login       ... set transaction isolation level read serializable ...
RPC:Completed     exec sp_executesql N'SELECT TOP (1)... 

最初のクエリがシリアライズ可能で実際に実行されたことがわかるので (これは、ロックを取得していることから推測できます)、Audit Login は、ログオン時の SPID の ISO レベルを単純に示しているということしか考えられません。それが何に変わるかではありません。

その場合、ISO の変更をトリガーするイベントはどこにありますか? すべてのイベントをオンにしましたが、何も表示されません...

4

1 に答える 1

1

トランザクション分離レベルの変更はRPC:Completedイベントではありません。

SQL:BatchStartingおよびSQL:BatchCompletedイベントを監視しているかどうかを再確認してください。

于 2013-01-04T16:08:02.663 に答える