一、进程和内存架构图
postgresql数据库启动时,先启动一个postmaster的主进程,然后fork出一些辅助子进程。
二、主进程postmaster
-bash-4.2$ which postgres
/usr/pgsql-9.6/bin/postgres
主进程postmaster 是整个数据库实例的总控进程,负责启动和关闭该数据库实例。用户运行postmaster、postgres命令并加上合适的参数启动数据库。实际上,postmaster命令是一个指向postgres的链接
-bash-4.2$ ls -l postmaster
lrwxrwxrwx 1 root root 8 May 16 08:29 postmaster -> postgres
三、syslogger(系统日志)进程
配置文件postgresql.conf中有logging_collect 为 on 时,主进程才会启动syslogger。
四、BgWriter(后台写)进程
负责吧共享内存中的葬爷写到磁盘上的进程。当往数据库中插入或者更新数据时,并不会马上把数据持久化到数据文件中。 ‘bgwriter_’开头的配置控制。
五、walwriter(预写日志写)进程 write ahead log,wal log 又简称xlog。
预写日志的概念就是在修改数据之前,必须要把这些修改操作记录到磁盘中,这样后面更新实际数据时,就不需要实时的把数据持久化到文件中了。
WAL日志保存在pg_xlog下。每个xlog文件默认16M,宕机情况下,未持久化的数据会通过WAL日志恢复。
六、PaArch(归档)进程
WAL日志会循环使用,也就是说,较早时间的WAL日志会被覆盖。PgArch归档进程会在覆盖之前把WAL日志备份出来。
七、AutoVacuum(自动清理)进程
对表进行delete操作后,旧的数据并不会立即被删除,旧的数据只是被标识为删除状态,只有在没有并发的其它事务读到这些旧数据时,他们才会被清楚掉。这个工作就是autovacuum完成。
八、pgstat(统计数据收集)进程
九、共享内存
postgresql启动后,会生成一块共享内存,共享内存主要用作数据块的缓冲区,以便提高读写性能。wal日志缓冲区和CLOG缓冲区也存在于共享内存中。
十、本地内存
临时缓冲区:用于访问临时表的本地缓冲区。
目录结构
一、通常安装在/usr/local目录下。
二、数据目录的结构。
一般使用环境变量PGDATA指向数据目录的根目录。这个目录在安装时指定的,所以在安装时需要指定一个合适的数据目录的根目录,每个数据实例都需要这么一个目录。
目录初始化用initdb完成的,会生成三个配置文件。
postgresql.conf: 数据库实例的主配置文件。
pg_hba.conf: 认证配置文件,允许哪些IP的主机访问,认证方法等。
pg_ident.conf: 'ident' 认证方式的用户映射文件。
子目录:base 默认表空间的目录
global:一些共享系统表的目录。
pg_clog:commit log的目录
pg_log:系统日志目录,查看系统错误时可查看此目录的日志文件。
pg_stat_tmp:统计信息的存储目录。
pg_twophase:使用两阶段提交功能时分布式事务的存储目录。
pg_xlog: WAL 日志的目录。