在特定表上执行select count(*)时,似乎出现了很多死锁。我已经更改了所有必需的参数,并将它们设置为仅行锁定。
我还更改了数据库以使用READ_COMMITTED_SNAPSHOT隔离,
但是,似乎使用select count(*),其中column =?在表上触发死锁或表上的锁。
我是否正确地认为select count(*)应该只访问中间行?但是,似乎不是那样,并且我仍然遇到死锁。正确的索引编制可能会有所帮助,
问题是:即使将read_committed_snapshot设置为on,SQL Server 2008 R2也会在选择count(*)期间在表上放置共享锁吗?
谢谢
您是否需要一个精确的计数(根据要求),还是可以近似计数?
—
乔恩·塞格尔
实际上,我只需要知道是否放置了共享锁。我正在尝试调查死锁问题。谢谢
—
grassbl8d
我的观点是,如果您可以考虑更改获取计数的方式,那可能就是解决死锁问题的方式。但是,现在我再次阅读了该问题,如果您需要使用一个
—
乔恩·塞格尔
WHERE
子句,那么我正在考虑的方法将无法正常工作。
如果where子句与过滤索引匹配,则可以从元数据表中获取表子集的近似计数。
—
亚伦·伯特兰