首页 > 编程知识 正文

数据库死锁产生的原因及解决方案,防止数据库死锁

时间:2023-05-03 15:11:57 阅读:230539 作者:2218

死锁发生的条件: 
  1、资源不能共享,需要只能由一个进程或者线程使用 
  2、请求且保持,已经锁定的资源自已保持着不释放 
  3、不剥夺,自给申请到的资源不能被别人剥夺 
  4、循环等待 
想预防死锁,把上面四个条件破坏一个就可以了。 
防止死锁的途径就是避免满足死锁条件的情况发生,为此用户需要遵循以下原则。 
(1)尽量避免并发地执行涉及到修改数据的语句。 
(2)要求每个事务一次就将所有要使用的数据全部加锁,否则就不予执行。 
(3)预先规定一个封锁顺序,所有的事务都必须按这个顺序对数据执行封锁。如不同的过程在事务内部对对象的更新执行顺序应尽量保持一致。 
(4)每个事务的执行时间不可太长,在业务允许的情况下可以考虑将事务分割成为几个小事务来执行。【比如说把复杂的多表查询分散成多次单表查询】 
(5)数据存储空间离散法。数据存储空间离散法是指采取各种手段,将逻辑上在一个表中的数据分散到若干离散的空间上去,以便改善对表的访问性能。主要通过将感动的短靴按行或列分解为若干小表,或者按不同的用户群分解两种方法实现。这种方法类似分散“数据热点”,但是确实,如果数据不是太经常被访问,那么死锁就不会太经常发生。 
(6)还是类似(1)的,比如有一个修改上百条记录的update语句,我们可以修改成每10条一个update语句,或者干脆就每条记录一个update语句。 
(7)将经常更新的数据库和查询数据库分开

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。