哪个进程在PostgreSQL中写入数据文件?
postgreSQL中的数据文件是什么?
注意:在postgreSQL-9.5上执行插入/更新/删除操作。我想验证哪个进程正在磁盘上执行提交,即数据文件。使用WAL和数据文件。
答案 0 :(得分:2)
PostgreSQL数据库集群的数据文件位于数据目录的data
子目录下。它们由三个过程编写:
将脏块从缓冲区写回磁盘的后台编写器进程,以确保有足够的干净块。
checkpointer进程在特定时间( checkpoints )将所有脏块写入磁盘,以提供崩溃的起点回收
后端进程(提供客户端连接的进程)只有在后台编写器无法跟上并且没有足够的空闲块可用时才将数据写入磁盘。
位于pg_xlog
的预写日志或WAL是完全不同的。它由COMMIT
之前的后端进程写入,以确保在崩溃情况下恢复事务所需的信息安全地写入磁盘。位于pg_clog
的提交日志也是如此,它包含提交或回滚事务的信息。
数据可以在COMMIT
之前写入数据文件,但只有在提交事务时才会显示。
值得一提的是,不仅DML语句会导致数据块变脏:
后台进程“autovacuum”会定期扫描表和索引,并删除未使用的条目。
读取新写入数据的第一个进程将在提交日志中查找提交信息,并将提示位写入元组,以便将来的读者不必这样做再次工作。