2016-12-14 75 views
1

哪个进程在PostgreSQL中写入数据文件?PostgreSQL-数据文件

什么是PostgreSQL中的数据文件?

注意:在postgreSQL-9.5上执行插入/更新/删除操作。我想验证哪个进程在磁盘即数据文件上执行提交。使用WAL和数据文件。

+1

http://www.cybertec.at/2016/11/postgresql-writer-and-wal-writer-processes-explained/和https://en.wikibooks.org/wiki/PostgreSQL/Architecture –

+0

目前,我通过jmeter.checkpoint_completion_target = 0.3,checkpoint_timeout = 30s发起大量查询,在每个查询之间保持30秒的延迟,以便可以检查数据文件上的数据刷新。 –

+0

对于具体提交,执行提交的后端是写入标记为提交的事务的WAL记录,然后更新'PGPROC'以设置共享内存状态。但是该事务完成的其他部分工作可以由bgwriter编写,稍后可以通过检查指针将更改应用于堆等。 –

回答

2

PostgreSQL数据库集群的数据文件位于数据目录的data子目录下。他们写了三个过程:

  • 背景作家过程写入脏块从缓冲区回磁盘,以确保有足够的清洁块。

  • checkpointer过程写入所有脏数据块在特定的时间磁盘(检查点),以提供用于崩溃恢复的起点。

  • 后端进程(即服务客户端连接的过程)只有在后台写入跟不上而没有足够的空闲块可将数据写入到磁盘中。

写日志或WAL,位于pg_xlog,是完全不同的东西。它由紧接在COMMIT之前的后端进程写入,以确保将发生崩溃时恢复事务所需的信息安全地写入磁盘。对于位于pg_clog中的提交日志也是如此,其包含如果事务被提交或回滚的信息。

数据可能会在COMMIT之前写入数据文件,但它们只在提交事务时才可见。

这可能是值得一提的是,不仅DML语句导致被弄脏的数据块:

  • 后台进程“自动清理”定期扫描表和索引和删除未使用的条目。

  • 第一进程读取新写入的数据将查找在提交日志提交信息,并写了暗示位的元组,使未来的读者不必再这样做的工作。

+0

是的。 TL; DR是“大多数PostgreSQL处理写入数据目录中的文件,每个表都是一个或多个文件,还有其他特殊文件,除了.conf文件之外,不要修改数据目录中的任何内容”。 –