7
|
Sidharth Panwar · 技术社区 · 14 年前 |
![]() |
1
2
看看这个 MSDN article
问题是,连接是以可序列化隔离级别打开的;关联的事务已被释放,连接也已被释放,但连接未被破坏并转到连接池。下一次请求连接时(使用相同的连接字符串),返回的正是这个连接,因为查询没有指定任何隔离级别,所以它是在可序列化的隔离级别中执行的。 基本上,如果您有一个连接池,并且在特定的隔离级别(比如Serializable)中打开了一个连接,那么该连接将返回到隔离级别设置为Serializable的池。下一次请求连接时,您无法确定是否不会返回此连接,因此即使默认隔离级别为ReadCommitted,您也可能会得到其中一个“可序列化”连接。 另一个警告是,每次将隔离级别设置为Serializable(或其他类似的设置)时,您可能会选择不同的连接,并且通过将它们的隔离级别设置为Serializable(或您设置的任何设置),您可能会慢慢地污染连接池中越来越多的连接。 我没有找到任何机制来重置正在处理的连接(当它在执行查询后返回连接池时)。一种解决方法是显式重置每个连接的隔离级别。但这很乏味。 因此,最好的选择是为不同的隔离级别创建单独的连接池 |
![]() |
2
1
在sp1中选定的表之后添加with(nolock),以确保不能向这些特定表添加读锁。 |
![]() |
3
0
|