面试题答案
一键面试快照生成过程
- 事务开始:当一个事务在PostgreSQL中启动并处于SSI隔离级别时,系统会为该事务生成一个快照。
- 记录活跃事务:快照中记录了当前系统中所有活跃(未提交)事务的列表。这包括事务ID等信息,用于标识每个活跃事务。
快照使用过程
- 读操作:
- 当事务进行读操作时,它只会看到在快照生成时刻已经提交的事务对数据的修改。
- 对于活跃事务(在快照中记录的)所做的修改,该事务是不可见的,从而避免了脏读。
- 写操作:
- 事务在写数据时,PostgreSQL会检查是否与快照中的活跃事务存在潜在冲突。例如,如果一个事务想要修改的数据已经被另一个活跃事务锁定或者修改,就可能产生冲突。
- 如果检测到冲突,PostgreSQL会根据SSI机制采取相应措施,通常是回滚当前事务,以确保事务的可串行化执行,避免出现不可重复读、幻读等问题。通过这种方式,利用快照来保证每个事务的执行就好像是串行执行一样,实现可串行化隔离级别。