面试题答案
一键面试基本流程
- 事务开始:应用程序发起事务,PostgreSQL开始跟踪事务相关信息,包括事务ID等。
- 数据修改:在事务内,对表数据进行插入、更新或删除操作。例如执行INSERT语句插入新行数据。
- WAL预写:修改的数据会先写入预写式日志(Write - Ahead Log,WAL)。WAL记录了对数据所做的修改,确保在系统崩溃时能够恢复未完成的事务。
- 页面修改:数据实际存储在数据页面(Page)上,修改操作会直接在内存中的数据页面上进行。例如更新某页中的行数据。
- 检查点:定期或在特定条件下,系统会执行检查点操作。它会将内存中已修改的数据页面(脏页)刷新到磁盘,同时将WAL中的记录截断,标记哪些事务已经安全持久化到磁盘。
- 事务提交:当事务完成所有操作并提交时,会在WAL中写入提交记录,确保事务的持久性。
关键步骤
- WAL写入:保证数据修改的持久性和崩溃恢复能力。在系统故障后,可以通过重放WAL日志来恢复未完成的事务和已提交但未持久化的数据。
- 页面刷新:将内存中修改后的页面写回磁盘,使数据持久化存储在数据库文件中。
- 事务提交记录:明确事务的结束状态,确保已提交事务的数据永久保存。
关键组件
- WAL日志:记录数据库的所有修改操作,是数据持久化和崩溃恢复的关键。它采用追加写的方式,保证日志记录的顺序性和完整性。
- Buffer Cache:内存中的数据缓冲区,数据页面在此被修改。它提高了数据访问效率,减少磁盘I/O。修改后的数据页面在此等待合适时机刷新到磁盘。
- Checkpointer:负责执行检查点操作的后台进程。它协调将脏页刷新到磁盘,并截断WAL日志,确保系统在崩溃后能快速恢复到一致状态。