PG后台进程个人解读和与oracle 的比较

1.background writer (后台写进程)

与OracleDBWR进程工作原理类似,都是负责把缓冲区里面的脏块写到数据文件中,写的目的有两个:

1.为了保存数据。

2.为了释放内存空间。

触发background writer 写的条件:

1.脏块达到了阈值。

2.内存没有可用空间了。

3.超过bgwriter_delay 参数设置的时间,bgwriter会写。

与Oracle不同的是:

oracle的内存结构包括shard pool与缓冲区  buffer cache以及redo log buffer等其它内存结构,oracle同步dbwr进程把脏块写入到数据文件。

PG 的缓冲区叫做Shared buffer pool ,如果学过oracle,这里类似于oracle的shared pool+buffer cache。

2.WAL writer  (WAL写进程)

作用:把日志缓冲区WAL buffer里面的日志条目写到日志文件

触发WAL writer 写的条件:

1.发出commit。

2.WAL buffer空间不足。

3.超时,commit_delay:表示一个已经提交的数据在WAL缓冲区中存放的时间,默认值是0毫秒,表示不用延迟;设置为非0值时事务执行commit后不会立即写入WAL中,而仍存放在WAL缓冲区中,等待WalWriter进程周期性地写入磁盘。

4.bgwriter写进程之前,WAL writer要先写。

与Oracle LGWR进程原理十分相似。

3.CheckPoint(CKPT)

职责:

1.把WAL buffer里面的脏块写入到数据文件

这一点与oracle 有些不同,oracle的检查点进程是给DBWR进程发信号,让DBWR进程去写,而PG的CKPT进程本身就有写脏块的能力。

2.更新检查点信息到控制文件与日志文件

3.数据库发生备份的时候会发生检查点

4.autoVacuum进程

在PG数据库中,对数据进行UPDATE或者DELETE操作后,数据库不会立即删除旧版本的数据,而是标记为删除状态。这是因为PG数据库具有多版本的机制,如果这些旧版本的数据正在被另外的事务打开,那么暂时保留他们是很有必要的。当事务提交后,旧版本的数据已经没有价值了,数据库需要清理垃圾数据腾出空间,而清理工作就是AutoVacuum进程进行的。

5.statistics collector 进程

PG 统计收集器。

无论是oracle还是PG 优化器能做出正确的执行计划依赖于正确的统计信息,statistics collector 进程 负责收集对象最新的统计信息, 便于优化器做出正确的执行计划,当然,Oracle 11g中也有自动收集统计信息的功能,但Oracle中没有一个单独的进程来做这件事。

6.logging collector 日志收集进程

我认为类似于Oracle 的diag进程,负责各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息,诸如此类。

PG的pg_log 日志默认竟然是不开启的?

7.archiver 归档进程

copy WAL日志进行归档,与oracle 一样,数据库在归档模式才会有这个进程。

 

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值