James Lupolt Asked: 2013-01-18 04:04:10 +0800 CST2013-01-18 04:04:10 +0800 CST 2013-01-18 04:04:10 +0800 CST 读取 DMV 时设置 READ UNCOMMITTED 772 我见过几个人SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED在阅读系统 DMV 之前打电话。假设您没有在同一事务中混合调用 DMV 和表格,是否有任何理由这样做? sql-server dmv 2 个回答 Voted Best Answer Brent Ozar 2013-01-18T05:07:03+08:002013-01-18T05:07:03+08:00 当其中一个人以这种方式编写演示 DMV 查询时,我将解释原因。 如果您只查询 DMV,这有关系吗?不会。但迟早,您将使用您的一个 DMV 脚本并加入到 sys.databases 或 sys.tables 或其他一些系统对象的连接,以便获得有关您正在查看的内容的更多信息。如果你没有在那里读未提交,你可以被其他查询阻止,并阻止其他查询。我一直被那个反复烧伤,所以无论何时我做任何诊断工作,我都默认使用 READ UNCOMMITTED。 Martin Smith 2013-01-18T04:45:49+08:002013-01-18T04:45:49+08:00 我不认为这有什么区别。 如果我尝试以下操作并比较 winmerge 中两个隔离级别的锁定输出,它们完全相同(甚至将其设置为SERIALIZABLE不会更改输出)。 /*Do once so compilation and caching out the way*/ EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) st cross apply sys.dm_exec_query_plan(cp.plan_handle) qp') DBCC TRACEON(1200,3604,-1); SET TRANSACTION ISOLATION LEVEL READ COMMITTED PRINT 'READ COMMITTED' EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) st cross apply sys.dm_exec_query_plan(cp.plan_handle) qp') SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED PRINT 'READ UNCOMMITTED' EXEC('select st.text, qp.query_plan, cp.cacheobjtype, cp.objtype, cp.plan_handle from sys.dm_exec_cached_plans cp cross apply sys.dm_exec_sql_text(cp.plan_handle) st cross apply sys.dm_exec_query_plan(cp.plan_handle) qp') DBCC TRACEOFF(1200,3604,-1);
当其中一个人以这种方式编写演示 DMV 查询时,我将解释原因。
如果您只查询 DMV,这有关系吗?不会。但迟早,您将使用您的一个 DMV 脚本并加入到 sys.databases 或 sys.tables 或其他一些系统对象的连接,以便获得有关您正在查看的内容的更多信息。如果你没有在那里读未提交,你可以被其他查询阻止,并阻止其他查询。我一直被那个反复烧伤,所以无论何时我做任何诊断工作,我都默认使用 READ UNCOMMITTED。
我不认为这有什么区别。
如果我尝试以下操作并比较 winmerge 中两个隔离级别的锁定输出,它们完全相同(甚至将其设置为
SERIALIZABLE
不会更改输出)。