死锁的定义
死锁是指两个或两个以上的进程在执行的过程中,由于竞态资源或由于彼此通信而造成的一种阻塞现象。若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态,这些在互相等待的进程称为死锁进程。
数据库发生死锁的条件
1.资源不能共享。需要只能由一个进程或线程使用。
2.请求且保持。已经锁定的资源自己保持着不释放。
3.不剥夺。 自己申请的资源不能被别人剥夺。
4.循环等待。
想防止死锁只需将上述条件破坏:
(1)尽量避免并发的执行涉及到修改数据的语句。
(2)要求每个事务一次就将所有要用的加锁,否则不予执行。
(3)每个事务执行的时间不能太长,在业务允许的情况下,可以考虑将事务分割成几个较小的事务来执行。
(4)数据存储空间离散法。采用各种手段将逻辑上在一个表中的数据分散到若干个离散的空间上,以便改善对表的访问。
(5)将经常更新的数据库与查询数据库分割开来。