数据库死锁总结:(3.7-3.13)

简介:
数据库死锁一般是两个或两个以上的线程同时争夺一个资源所造成的互相等待死锁的状态,比如用户访问线程A锁住记录C,另一用户访问线程B且需
访问记录C的时候就会形成死锁;

形成死锁的主要原因:
1.系统资源不足;(系统资源充足分配的时候很少形成死锁)
2.访问的对象的顺序不一致;
3.系统资源分配的不恰当等;

形成死锁的四个必要条件(缺一不可):
1.互斥条件:同一时间,一个对象资源只能被一个线程所占用使用,其他线程无法占用;
2.请求与保持条件:当一个进程发起访问请求新资源时,本身持有的资源不会释放;
3.不剥夺条件:一个进程的资源没有使用完毕时,不能被强行剥夺;
4.循环等待条件:两个或两个以上进程形成首位相待的等待同一资源的条件;

减少死锁发生的措施:
1.多线程同时顺序访问对象:多个线程之间,比如线程A和线程B都需要访问表A和表B,线程A先访问表A再访问表B,在这个过程中线程B处于等待状态;
2.避免用户交互:实际情况下,事务中没有用户交互的效率比有用户交互的高的多,如有用户交互的场景时,需要用户输入一串验证或其他内容时,这个
             时候,用户不在电脑前做其他事,将会造成资源的一阻塞等待状态,轻微点会性能较差,严重点其他线程访问该资源会形成死锁;
3.多个事务尽量简短并且在一个批处理之中:因为多个事务长的话,本身持有的排他锁或更新锁时间比较长,容易形成死锁,所以尽量让事务简短,多个
                                事务尽量在一个批事务处理,是因为事务越少,网络性能开销越少,性能响应越快,造成事务完成的延迟的
                                可能性就越小;
4.使用低等级隔离级别:部分场景下,我们可以在完成任务的前提下使用更低的隔离级别,如串行化的级别可以变成使用读提交的级别进行完成事务;
5.绑定连接:当一个应用程序进行两个或两个以上连接绑定之时,次级连接所使用的锁资源可以像主连接所持有的的锁一样持有,没有死锁风险,相反
         也是一个道理;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值