面试题答案
一键面试利用日志机制实现故障恢复
- Redo Log(重做日志)
- 作用:Redo log用于记录数据库物理层面的修改操作。在系统崩溃后,MariaDB会根据redo log中的记录将未完成的事务回滚,并将已提交的事务重新应用。
- 恢复过程:当数据库重启时,数据库系统会从redo log的起始位置开始扫描。对于已经提交的事务,系统会按照redo log中记录的修改操作重新执行一遍,将数据恢复到事务提交时的状态,从而确保已提交事务对数据的修改得以持久化,保证了事务的持久性。
- Undo Log(回滚日志)
- 作用:Undo log记录了数据修改前的版本,用于事务回滚。在事务执行过程中,每一个修改操作都会同时记录对应的undo信息。
- 恢复过程:在系统崩溃后,对于未完成的事务,数据库系统会根据undo log中的记录将数据恢复到事务开始前的状态,确保这些未完成的事务对数据的修改不会生效,以此保证事务的原子性,即要么事务全部完成,要么全部不完成。同时,undo log也有助于在多版本并发控制(MVCC)中提供旧版本的数据,保证一致性。
并发控制机制协同工作保障数据一致性
- 锁机制
- 共享锁(S锁)与排他锁(X锁):在高并发环境下,当一个事务需要读取数据时,会获取共享锁,多个事务可以同时持有共享锁读取数据。而当一个事务需要修改数据时,会获取排他锁,此时其他事务不能再获取任何锁(共享锁或排他锁)来访问该数据,直到排他锁被释放。通过这种方式,避免了并发事务对同一数据的冲突修改,保证了数据一致性。
- 锁的粒度:MariaDB支持不同粒度的锁,如行级锁、表级锁等。行级锁可以提高并发性能,因为它只锁定需要操作的行数据,而表级锁则适用于一些对整个表进行操作的场景。在并发事务处理中,根据具体的业务需求选择合适的锁粒度,以平衡并发性能和数据一致性。
- 多版本并发控制(MVCC)
- 原理:MVCC是一种基于数据多版本的并发控制机制。在MVCC中,数据库为每一行数据维护多个版本,这些版本通过undo log来实现。当一个事务读取数据时,它会根据自身的事务ID和数据版本号来决定读取哪个版本的数据。
- 优点:MVCC允许读操作和写操作并发执行,而不需要像锁机制那样进行阻塞。读操作不会阻塞写操作,写操作也不会阻塞读操作,大大提高了并发性能。同时,MVCC也保证了在并发读/写操作下的数据一致性,因为每个事务看到的数据版本是一致的,符合事务的一致性要求。