客户端后端VS后台编写器



我知道background writer,checkpointer,walwriterparallel_worker的区别:

  • walwriter vs bg writer vs checkpointer
  • client_backend vs parallel_worker

但我与client backend混淆。我使用opensnooptrace发现client backend通常会向data-file和wal-file写入(pwrite(2))一些内容。

PID                     COMM               FD ERR PATH
18365 (client backend)  postgres           51   0 base/16384/16403
18365 (client backend)  postgres           52   0 pg_wal/0000000100000001000000E1

问题
  1. client backend负责什么?
  2. 每个连接最多一个client backend?

客户端后端是与客户端通信并代表客户端执行SQL语句的服务器进程。每个数据库会话都有一个客户端后端进程。

然而,客户端后端进程通常不应该写入数据文件:后端只将表数据写入共享缓冲区(缓存),以及"检查指针"。和"背景写手";进程完成了对磁盘的大部分实际写操作。这里的设计思想是,客户机后端不应该被这些潜在的缓慢任务所困扰,而是可以自由地尽可能快地处理SQL语句。当事务提交时,WAL由后端进程编写,否则由WAL编写进程负责。因此,您看到后端执行这些写操作是正常的。

如果后台写入器速度不够快,无法处理工作负载,可能会发生后端进程必须完成一些写入的情况。这不应该经常发生,而应该只在数据修改活动的高峰期间发生。通常,这表明如果增加共享缓冲区的大小,可以提高SQL语句的性能。

最新更新