如何减少Sql server死锁现象的发生?
3个回答
展开全部
如何减少Sql server死锁现象呢?这是很多人都提到过的问题,在解决此问题之前,先让我们了解一下什么是Sql server死锁.
Sql server死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就可能会产生死锁,这些永远在互相等待的进程称为死锁线程.简单的说,进程A等待进程B释放他的资源,B又等待A释放他的资源,这样互相等待就形成死锁.
如在数据库中,如果需要对一条数据进行修改,首先数据库管理系统会在上面加锁,以保证在同一时间只有一个事务能进行修改操作.如事务1的线程 T1 具有表A上的排它锁,事务2的线程T2 具有表B上的排它锁,并且之后需要表A上的锁.事务2无法获得这一锁,因为事务1已拥有它.事务2被阻塞,等待事务1.然后,事务1需要表B的锁,但无法获得锁,因为事务2将它锁定了.事务在提交或回滚之前不能释放持有的锁.因为事务需要对方控制的锁才能继续操作,所以它们不能提交或回滚,这样数据库就会发生死锁了.
Sql server死锁是指在某组资源中,两个或两个以上的线程在执行过程中,在争夺某一资源时而造成互相等待的现象,若无外力的作用下,它们都将无法推进下去,死时就可能会产生死锁,这些永远在互相等待的进程称为死锁线程.简单的说,进程A等待进程B释放他的资源,B又等待A释放他的资源,这样互相等待就形成死锁.
如在数据库中,如果需要对一条数据进行修改,首先数据库管理系统会在上面加锁,以保证在同一时间只有一个事务能进行修改操作.如事务1的线程 T1 具有表A上的排它锁,事务2的线程T2 具有表B上的排它锁,并且之后需要表A上的锁.事务2无法获得这一锁,因为事务1已拥有它.事务2被阻塞,等待事务1.然后,事务1需要表B的锁,但无法获得锁,因为事务2将它锁定了.事务在提交或回滚之前不能释放持有的锁.因为事务需要对方控制的锁才能继续操作,所以它们不能提交或回滚,这样数据库就会发生死锁了.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询