如何在 SQL Profiler 或任何其他工具中监视事务隔离级别更改

Pus*_*ots 6 sql sql-server entity-framework sql-server-profiler entity-framework-6

我已经成功地只能看到transaction isolation level事件中的Audit Login事件。还有其他方法可以transaction isolation level使用 SQL Profiler 或使用其他工具来监视更改吗?我问的原因是因为 SQL Profiler 似乎无法以正确的顺序输出事件,或者它跳过事件,因为在我的应用程序中设置IsolationLeveltoSerializable时它仍然显示transaction isolation level read committed.

Audit LoginSQL Profiler 中的示例:

-- network protocol: Named Pipes
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level serializable
Run Code Online (Sandbox Code Playgroud)

Ed *_*ott 3

恐怕没有一个。

即使有一个,您希望看到在联接中查询多个表并且一个或多个表具有未提交读取的 NOLOCK 的情况吗?

探查器在语句级别而不是表级别报告查询,因此您将拥有混合的事务隔离级别(探查器和扩展事件也是如此)

您可以做的最好的事情就是手动解析语句开始(批处理和过程)并查找设置的事务隔离级别。

编辑

  • 对于 SQL Profiler 中的所有查询都会很好。但在这种特殊情况下,我希望在简单的 db.Orders.Find(1) 查询中查看隔离级别,该查询位于使用 Entity Framework 6 的 BeginTransaction(IsolationLevel.Serializable) 中。 (2认同)