database - PostgreSQL-数据文件

标签 database postgresql rails-postgresql postgresql-9.5

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

以及postgreSQL中的数据文件是什么?

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

最佳答案

PostgreSQL 数据库集群的数据文件位于数据目录的data 子目录下。它们由三个进程编写:

  • 后台写入器进程将缓冲区中的脏 block 写回磁盘以确保有足够的干净 block 。

  • 检查点进程在特定时间将所有脏 block 写入磁盘(检查点)以提供崩溃起点恢复。

  • 后端进程(为客户端连接提供服务的进程)仅在后台写入器无法跟上并且没有足够的空闲 block 可用时才将数据写入磁盘。

位于pg_xlog 中的预写日志 或WAL 是完全不同的东西。它由后端进程紧接在 COMMIT 之前写入,以确保在崩溃的情况下恢复事务所需的信息被安全地写入磁盘。这同样适用于位于 pg_clog 中的提交日志,其中包含事务已提交或回滚的信息。

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

可能值得一提的是,导致数据 block 变脏的不仅仅是DML语句:

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

  • 读取新写入数据的第一个进程将在提交日志中查找提交信息并将提示位写入元组,以便以后的读者不必这样做再次工作。

关于database - PostgreSQL-数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41140598/

相关文章:

ruby-on-rails - 使用 "database users"在 Ruby on Rails 中进行身份验证

mysql - 计算 mySQL 中每一行的出现次数

php - REST 调用返回空白页

database - 在 SQL 表名中包含数字是好主意还是坏主意?

postgresql - 使用 Postgresql 将查询另存为表

postgresql - 在 PostgreSQL 中创建表作为选择

postgresql - 收到以下错误 : "SequelizeDatabaseError column "createdAt"does not exist"

mysql - 带外键的简单数据库设计

ruby-on-rails - Rails 和 PostgreSQL 中的时区和夏令时

ruby-on-rails - 如何使用 Rails 为所有迁移文件设置默认的 'uuid-ossp' 扩展名?