我有2个查询,当同时运行时会导致死锁。
查询1-更新索引(index1)中包含的列:
update table1 set column1 = value1 where id = @Id
在table1上获取X-Lock,然后在index1上尝试X-Lock。
查询2:
select columnx, columny, etc from table1 where {some condition}
在index1上获取S-Lock,然后在table1上尝试S-Lock。
有没有办法在保持相同查询的同时防止死锁?例如,我是否可以在更新之前以某种方式对更新事务中的索引进行X锁定,以确保表和索引访问的顺序相同-这样可以防止死锁?
隔离级别为“已提交读”。已为索引启用行锁和页锁。同一条记录可能同时参与这两个查询-从死锁图中我看不出来,因为它没有显示参数。