面试题答案
一键面试基本原理
PostgreSQL 通过多版本并发控制(MVCC)实现可见性判断机制。每个数据行都有与之关联的元数据,包括事务ID 等信息。不同事务操作数据时会创建数据的不同版本,而不是直接修改原有数据。这样在并发环境下,各个事务能看到数据在不同时间点的状态,而不会相互干扰。
利用事务ID确定数据行可见性
- 事务创建的数据行:当一个事务插入新的数据行时,会为该行分配一个唯一的事务ID(XID),标记该事务是此数据行的创建者。
- 事务删除数据行:删除操作并不会立即物理删除数据行,而是在该行标记删除信息,并记录执行删除操作的事务ID。
- 可见性判断逻辑:
- 当前事务自己创建的数据行:当前事务创建的数据行对自己始终可见,因为是自己的操作结果。
- 其他事务创建的数据行:
- 如果创建数据行的事务已提交,且该数据行未被标记删除,或者标记删除的事务未提交,那么该行对当前事务可见。
- 如果创建数据行的事务未提交,那么该行对当前事务不可见,因为事务具有隔离性,未提交的事务修改对其他事务不可见。
- 如果数据行被标记删除,且执行删除操作的事务已提交,那么该行对当前事务不可见。