数据库并发操作带来的问题以及解决方案

数据库并发操作带来的数据不一致性主要有, 丢失修改,不可重复读(里面包括幻读),读脏数据

其中不可重复读有三种情况,后两种称为幻读,幻读和不可重复读的区别是幻读是对数据的删除增添,不可重复读是数据的修改

解决办法 封锁

锁包括 排它锁(X锁)和共享锁(S锁)

封锁带来的问题 :活锁(先来先服务解决),死锁

死锁解决方案:预防死锁,定期检测死锁解除死锁

预防:1 一次封锁法 ,问题降低并发度

            2 顺序封锁法,问题是封锁顺序开销大,二是事务的封锁请求可以随着事务的执行而动态决定

检测和解除:

      检测:1 超时等待法,问题  1 误判死物,二是设置时间太长,会导致死锁长时间检测不到

                  2 等待图法, 事务等待图是一个有向图G=(T,U),T为结点的集合,每个结点表示正运行的事务,u为边的几何,每条边表示事务等待的情况,若T1等待T2,则T1,T2之间有一条有向边,从T1指向T2,事务等待图动态的反映了所有事务的等待情况,并发控制子系统周期性的生成事务等待图,并进行检测,如果发现图中存在回路,则表示系统中出现了死锁。

死锁的解除:选择一个处理死锁代价最小的事务,将其撤销,释放次事务持有的所有锁,使其他事务得以继续运行下去,当然,对撤销的事务所执行的数据修改操作必须加以恢复。

你可能感兴趣的:(数据库)