在SQL Server 2005中,Select查询块何时插入或更新到相同或其他表?

问题描述:

在过去,我一直认为select查询不会阻塞其他insert sql。但是,最近我写了一个查询,需要很长时间(超过2分钟)才能从表中选择数据。在select期间,一些insert sql语句超时。在SQL Server 2005中,Select查询块何时插入或更新到相同或其他表?

如果选择块插入,解决方法是什么才能防止超时而不会导致脏读?

我调查了使用隔离快照的选项,但目前我无法访问更改客户端的数据库以启用“ALLOW_SNAPSHOT_ISOLATION”。

感谢

+0

你的选择在什么隔离级别下运行?似乎它必须高于'readcommitted' –

什么时候Select查询块插入或更新到相同或 其他表格?

当它在与插入或更新语句需要的资源互斥的资源上持有锁时。

根据readcommitted隔离级别没有额外的锁定提示,然后S锁取出通常会释放一旦数据被读取。但是,对于repeatable readserializable,它们将一直保留到交易结束(单个选择的陈述不在明确的交易中运行)。

serializable通常会取出范围锁定,这会导致额外的阻塞,超过由锁定实际读取的行和页面上的锁定引起的阻塞。

+0

因此,在典型情况下,读取完成后,它将释放锁并允许再次插入,如果我错了,请纠正我的错误?如果在同一连接中有多个选择到不同的表?只有在连接关闭时或在选择查询完成后才释放锁吗? – dsum

+0

@dsum - 是的。除非你的插入请求整个表锁或什么的。 –

READPAST可能是你在找什么 - 退房this article

+0

这不会有助于阻止插入语句。 –

+0

你说得对,我误解了这些信息。 –