事务产生的原因:
保持事物一致性方法
1.序列化读写
缺点:性能低
排他锁(冲突的队列事物串行)
读写锁(读写分离,读读并行,读写,写读,写写串行)
MVCC(多版本并发控制,每次操作都逻辑时间戳)
逻辑时间戳:类似实现为一个自增的id,主要是为了解决谁先谁后的问题
如果读取数据发生在写之后,那么读操作版本号应该大于写版本号
缺点系统复杂度高
数据库中使用
其他还包括物理时间错 ,即,用时间做时间错
死锁
碰撞检测:
- 找到一个维持锁的事物单元
- 找到持有的锁
- 找到申请的锁
- 根据申请的锁查找持有该锁的第二个事物单元
- 查找第二个事物单元是否使用第一个事物的锁
- 如果相同就结束其中一个事物
单机事物
每次版本跟新都记录上一个版本undo日志,用来回滚
对每一个事物加锁防止其他事物访问,事物完成后释放锁(加锁事物过长会影响性能)
读已提交中读锁可以被写锁升级,但读读并行第二个读可能读到前一个读到的数据(即可重复读);读写并行情况下 如果先读的一个数据被第二个写修改,在读数据就会不同(即不可重复读)
因为读没加锁
多事物读并行每次都记版本号,当事物冲突时低版本事物回滚,从而保证事物安全
分布式事物