【问题标题】:SQL Profiler not displaying all ADO.NET operationsSQL Profiler 不显示所有 ADO.NET 操作
【发布时间】:2013-01-04 15:59:47
【问题描述】:

我有以下创建可序列化事务的代码。该应用程序按预期工作:

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 更改的事件在哪里?我已开启所有事件,但什么都看不到...

【问题讨论】:

    标签: sql-server sql-server-2008 entity-framework ado.net sql-server-profiler


    【解决方案1】:

    更改事务隔离级别不是RPC:Completed 事件。

    仔细检查您是否正在监视 SQL:BatchStartingSQL:BatchCompleted 事件。

    【讨论】:

    • 已经出现在我的踪迹中。它们不显示 TransactionScopes 的隔离级别。
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2018-04-06
    • 2014-10-12
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多