面试题答案
一键面试S2PL基本原理
- 加锁阶段:在事务执行过程中,事务会根据需要对数据项加锁。只有获得所需锁之后,事务才能访问相应的数据。例如,对于读操作加共享锁(S锁),允许其他事务同时读;对于写操作加排他锁(X锁),不允许其他事务同时读写。
- 解锁阶段:事务进入解锁阶段后,才开始释放锁。在解锁阶段之前,事务持有的所有锁都不会释放。并且,一旦事务开始释放锁,就不能再获取新锁。
SSI基本原理
- 快照生成:每个事务开始时,系统为其生成一个快照。这个快照包含了该事务开始瞬间数据库的一致性视图。事务在执行读操作时,基于这个快照进行,不会看到其他并发事务尚未提交的修改。
- 写检测:当事务进行写操作时,系统会检测是否存在可能导致序列化异常的情况。如果发现当前事务的写操作与其他并发事务的读写操作存在冲突,就会回滚当前事务。
两者在保证事务一致性方面的主要区别
- 锁的使用方式
- S2PL:通过严格的加锁和解锁机制,在事务执行期间长时间持有锁,来避免并发事务间的冲突,保证事务一致性。例如,一个事务对某数据项加排他锁后,其他事务只能等待锁释放。
- SSI:并非完全依赖锁,主要通过快照和写检测机制。读操作基于快照,不阻塞其他事务,写操作时检测冲突,只有冲突时才可能回滚事务。
- 并发性能
- S2PL:由于长时间持有锁,可能导致其他事务长时间等待,在高并发场景下,锁争用可能严重影响性能。
- SSI:读操作不阻塞写,写操作也只有在检测到冲突时才处理,在很多场景下能提供更高的并发性能。
- 一致性模型
- S2PL:通过严格的锁机制可实现强一致性,确保事务的执行顺序可串行化。
- SSI:虽然也保证可串行化隔离级别,但通过快照和写检测机制实现,在某些复杂场景下,可能出现与传统锁机制下不同的事务执行顺序,但最终一致性仍能保证。