龙空技术网

PostgreSQL开发与实战(6.1)体系结构1

云掣小助手 21

前言:

此时小伙伴们对“pg数据库启动不了”都比较珍视,你们都需要分析一些“pg数据库启动不了”的相关文章。那么小编也在网上搜集了一些关于“pg数据库启动不了””的相关知识,希望你们能喜欢,小伙伴们快快来学习一下吧!

作者:太阳

一、进程结构

PG数据库启动时会先启动一个主进程(9.3之前称为postmaster,9.3以后称为postgres server process),然后fork出一些辅助子进程(backend、backgroud相关进程),不同的辅助子进程负责不同的工作。当客户端请求访问时,客户端先与主进程创建连接并进行身份验证,身份验证成功后fork出一个子进程(服务进程)为这个连接服务。所以说PG数据库其实是一个多进程架构模型。

postgres server process 是所有进程的父进程

backend process 每一个客户端的连接都有一个后端进程存在

backgroud processes 为管理数据库而产生的一些进程

backgroud work processes 9.3以后版本开始有这个进程,这里不做详细介绍

1.1 postgres server process(主进程)

postgres server process(守护进程)

早期版本叫做postmaster进程,它是postgres数据库的核心,整个数据库的总控进程。当数据库启动后会从物理内存中分配内存给shared memory,然后产生很多其他的backgroup processes ,等待客户端来连接,每产生一个连接就会生成一个backend process。一个postgres server process只能监听一个端口,默认端口是5432。生产中数据库启停使用更多的是pg_ctl命令,而 pg_ctl 命令其实是对postgres命令的一个包装,而postmaster其实是postgres的一个链接。

postmaster主进程的功能:

数据库的启停监听客户端连接,默认为每个客户端连接fork单独的postgres服务进程当服务进程出错时进行修复管理数据文件管理数据库运行相关的辅助进程

当客户端调用接口像数据库发起连接请求,守护进程postmaster会fork单独的服务进程postgres 为客户端提供服务,此后由postgres服务进程为客户端执行各种命令,客户端也不需要postmaster进行中转,直接与服务进程postgres进行通讯。

1.2 backgroud processes(辅助子进程)

# ps -ef | grep postgrespostgres  9011     1  0 9月27 ?       00:00:15 /usr/local/pgsql/bin/postgrespostgres  9012  9011  0 9月27 ?       00:00:00 postgres: loggerpostgres  9014  9011  0 9月27 ?       00:00:01 postgres: checkpointerpostgres  9015  9011  0 9月27 ?       00:00:11 postgres: background writerpostgres  9016  9011  0 9月27 ?       00:00:11 postgres: walwriterpostgres  9017  9011  0 9月27 ?       00:00:12 postgres: autovacuum launcherpostgres  9018  9011  0 9月27 ?       00:00:01 postgres: archiver   last was 0000000100000000000000ABpostgres  9019  9011  0 9月27 ?       00:00:22 postgres: stats collectorpostgres  9020  9011  0 9月27 ?       00:00:00 postgres: logical replication launcherroot     28788 27741  0 16:03 pts/2    00:00:00 grep --color=auto postgreslogging collector (logger)

日志进程,PostgreSQL的默认日志是关闭的,可在postgres.conf文件中logging_collect、log_directory、log_filename、log_rotation_age、log_rotation_size相关参数进行设置,打开日志收集,主进程就会启动logger日志进程。该进程会收集所有其他的进程的日志信息。

checkpointer

数据库的检查点进程

background writer 进程

后台写进程,主要负责把共享内存(shared buffer pool)中的脏页周期性的写到磁盘。

autovacuum launcher 进程

自动清理进程,主要负责对已经删除标记的数据进行清理。在PG数据库中delete操作只是对原记录进行delete的打标,update同样也是对原记录进行delete打标并插入一条新数据,被delete打标的记录并不马上做删除处理,而是通过 autovacuum 进程来对历史无效数据进行清理,为vacuum process周期性的调用autovacuum work processes,释放磁盘空间。

archiver 进程

归档进程,主要负责对wal日志进行备份归档。wal日志是循环覆盖的,所以就有了 archiver(9.3之前叫pgarch) 进程,可以保证wal日志在覆盖前进行备份归档,另外pg基于时间点恢复也是利用该进程进程,对全备之后的位点日志进行归档,保证全备文件+wal日志恢复至任意时间点。

stats collector 进程

统计数据收集进程,主要负责收集表数据的统计信息以用于数据库优化器的代价估算。pg_statistic表存储了pgstat进程采集的各类统计信息。

wal write 进程

预写日志进程,保证数据库在修改数据之前必须先将对应的变更操作写入到wal日志并进行持久化到磁盘。保证数据库即使异常宕机,可以可以通过wal日志进行崩溃恢复。

1.3 backend processes (服务进程)

服务进程

客户端连接进程,通过TCP/IP协议和客户端建立通讯,当客户端发起连接请求时,首先与postmaster进行连接并进行身份验证,身份验证通过后postmaster会启动一个子进程为这个连接服务,也就是服务进程。postgres允许多个客户端同时连接,连接数由max_connections参数控制,默认是100,数据库本身不提供连接池的功能,如果频繁的创建/断开连接将对数据库带来一定的资源消耗。

更多技术信息请查看云掣官网

标签: #pg数据库启动不了