几天前我遇到了一个奇怪的场景,当时返回4行数据的简单SELECT语句导致SQL Server中的阻塞链。没有公开交易。任何暗示为什么会发生这种情况?
答案 0 :(得分:2)
是的,一个简单的SELECT语句可以在死锁中结束,想象一下 User1仅读取数据而User2尝试更新的场景 一些数据和那个表上有一个非聚集索引,它是 可能的。
1)User1正在读取Some Data并获取共享锁 非聚集索引,以便执行查找,然后尝试 获取页面上的共享锁定,以便按顺序排列数据 返回数据本身。
2)正在写/正在更新的User2首先获得了一个exlusive锁 包含数据的数据库页面,然后尝试获取 对索引进行独占锁定以更新索引。
Read here 了解有关锁定sql-server的更多信息。