postgrel 事务并发锁
什么是ACID
原子性 (atomicity) 一致性(consistency) 隔离性(isolation)持久性(durability)
在PG中,可使用多版本并发控制(MVCC)来维护数据的一致性。
PG默认事务是自动提交的。也可以在大的事务里面做一个保存点。
事务隔离级别
隔离级别 脏读 不可重复读 幻读
读未提交 可能 可能 可能
读已提交 不可能 可能 可能
重复度 不可能 不可能 可能
串行化 不可能 不可能 不可能
脏读: 是一个事务读取了另一个事务未提交的数据。
不可重复读:指一个事务读完了之前读取过的数据。
幻读:一个事务开始后,前后两次查询,返回的行不一样。
9.1版本之前只有读已提交和串行化。
9.1版本之后,加了可重复读。如果你选择读未提交,实际还是读已提交。
读已提交是默认的隔离级别
两阶段提交是实现分布式事务的关键。
锁机制
PG 数据库有两类锁,表级锁和行级锁。
行级锁模式
只有两种,即 共享锁 和排它锁。或者是读锁和写锁。
死锁及防范
死锁必须具备以下4个必要条件,
1,互斥,制事务对分配到的资源加了排它锁。
2,请求和保持条件,指事务已经至少持有了一把排它锁。但是又提出了新的排它锁请求,而该资源上的排它锁已被其他事务占有,此时请求被阻塞,但同事它对自己已获得的排它锁持有不放。
3,不剥夺条件,指事务已经获得的锁在未使用完之前不能被其他进行剥夺。只能在使用完时由自己释放。
4,环路等待条件,指在发生死锁时,必然存在一个事务 资源的环形链。
防范
程序按照固定的顺序一次操作表。