sql-server – 使用SQL Server的SELECT JOIN语句导致的死锁
当执行带有SQL Server似乎的两个表的JOIN的SELECT语句时
单独锁定语句的两个表.例如通过类似的查询 这个: SELECT ... FROM table1 LEFT JOIN table2 ON table1.id = table2.id WHERE ... 我发现锁的顺序取决于WHERE条件.该 当语句读取的数据应在事务中稍后更新时 T1: SELECT ... FROM ... JOIN ... T1: UPDATE table1 SET ... WHERE id = ? T2: SELECT ... FROM ... JOIN ... (locks table2,then blocked by lock on table1) T1: UPDATE table2 SET ... WHERE id = ? 两个表都表示类型层次结构,并始终一起加载.所以 我试图向SELECT语句添加锁定提示,但事实并非如此 迄今为止唯一的工作方式似乎是读取可能无法锁定 我想知道是否还有其他可能阻止SQL Server 解决方法当读者不阻止编写者时,在快照隔离下永远不会发生这种情况.除此之外,没有办法阻止这样的事情.我在这里写了很多repro脚本: Reproducing deadlocks involving only one table编辑: 我无法访问SQL 2000,但我会尝试使用sp_getapplock序列化对象的访问,以便读取和修改永远不会同时运行.如果您不能使用sp_getapplock,请推出自己的互斥锁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |