PostgreSQL 进程结构

ps -ef | grep postgres
\d pg_stat_activity
select pid, backend_type from pg_stat_activity;

一、总控制进程

Postmaster

        负责启动和关闭数据库实例(通常我们都使用pg_ctl,实际上也是通过bin/postgres来实现的,只是做了一层命令包装)

        当用户与PG建议连接时,实际上是通过Postmaster进程建立连接。此时客户端会发出身份验证的消息给Postmaster进程,Postmaster主进程根据消息中的信息进行客户端身份验证。如果验证通过,它会fork一个子进程postgres为这个连接提供服务,fork出来的进程被称为服务进程。

二、系统日志进程

SysLogger

        默认是不启用的,通过postgresql.conf启用以后,才会有SysLogger进程

        SysLogger会在日志文件达到指定大小时关闭当前日志文件,产生新的日志文件

log_destination配置日志输出目标,根据不同的运行平台会设置不同的值,Linux平台下默认为stderr
logging_collector是否开启日志收集器,当设置为on时启动日志功能。否则,系统将不产生系统日志辅助进程
log_directory配置日志输出文件夹
log_filename配置日志文件名称命名规则
log_rotation_size配置日志文件大小,当前日志文件达到这个大小时会被关闭,然后创建一个新的文件来作为当前日志文件

三、后台写进程

BgWriter

        当发生checkpoint时,将内存中的脏数据刷到磁盘做持久化存储的辅助进程

# 通过命令行输出相关参数
psql -c 'show all;' | grep bgwriter_

bgwriter_delay连续两次写数据之间的时间间隔也就是每隔200毫秒,数据库会产生一个checkpoint触发后台写进程
bgwriter_flush_after当检查点队列(内存中)的脏页/块达到了512kB时,触发后台写进程
bgwriter_lru_maxpages每次写的最大数据量是多少
bgwriter_lru_multiplier一个估算最近几次刷脏数据时的平均值因子
每次写入磁盘的数据块个数

四、预写日志进程

WalWriter

        wal也称为xlog

        它的意义,也是核心思想就是:先写日志后写数据,既能保证数据不丢失,还降低了读写压力
        Oracle中对应的进程叫LogWriter

五、归档进程

PgArch

        从PG 8.x版本开始,有了PITR即时/基于时间点恢复技术。PITR其中一个重要的基础依赖于WAL日志文件的归档功能

        PgArch辅助进程的目标就是对WAL日志在磁盘上的存储形式进行归档备份

        默认情况下和Oracle一样,没有开启归档/非归档模式,因此看不到PgArch进程

# postgresql.conf

# - Archiving -
archive_mode = off
archive_command = ''

六、自动清理进程

AutoVacuum

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

七、统计信息收集进程

PgStat

        统计信息:反映的数据的分布情况 --> 数据库的优化器CBO(cost based opimizer)、RBO

--> SQL最佳的执行计划

        收集统计信息主要是为了让优化器做出正确的判断,选择最佳的执行计划

# postgresql.conf

# STATISTICS
track_activities = on
track_activity_query_size = 1024    
track_counts = on
track_io_timing = off
track_wal_io_timing = off
track_functions = none    
stats_temp_directory = 'pg_stat_tmp'

八、检查点进程

CheckPoint

        触发检查点进程时,该进程操作的优先级是最高的

        检查点是系统设置的事务序列点,设置检查点保证检查点前的日志信息刷到磁盘中

# postgresql.conf

# - Checkpoints -
checkpoint_timeout = 5min        
checkpoint_completion_target = 0.9
checkpoint_flush_after = 256kB  
checkpoint_warning = 30s 
max_wal_size = 1GB
min_wal_size = 80MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值