sql server死锁了怎么办

如题所述

死锁是这样形成的,假设有两个事物A和B
A事物在执行中需要更新两个表,假设为T1,T2,此时A已执行完T1,正在申请使用T2.
B事物也需要更新这两个表,但B事物先执行了T2,正在申请使用T1,
因为T1已被A事物锁定,所以B必须等待A事物执行完后释放锁,但A事物此时正在申请T2,而T2确被B事物先锁定了,需等待B事物完成后释放锁后才可获得T2的锁,此时死锁就发生了,如果没有死锁机制,这两个事物就会一直等下去。
sql server会定期检查死锁,如果发现死锁,就会权衡两个事物,牺牲掉其中一个执行代价较小的事物,使另一个事物能继续执行。

要避免死锁的发生,有很多需要注意的,如
1.保持事物尽可能的简短。
2。事物更新的顺序尽量一致,如上例中A和B如果更新顺序都为T1,T2或T2,T1的话就不会发生死锁了。
3.可以修改锁的粒度,如页锁改为行锁
温馨提示:答案为网友推荐,仅供参考
相似回答