postgresql目录及进程说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a964921988/article/details/83900373

postgresql采用常见C\S架构,服务端的主程序和进程叫做postgres,每当有新的客户端连接,服务器端都会新增一个postgres进程与之交互。主进程用来管理所有的数据文件,接收客户端请求,执行客户端操作。客户端可以是JDBC/ODBC,psql命令行客户端等等。

postgresql常见进程:

wal sender process/ wal receiver process:

wal sender 进程和wal receiver进程是实现postgresql复制(streaming replication)的进程,Wal sender进程通过网络传送WAL日志,而其他PostgreSQL实例的wal receiver进程则接收相应的日志,Wal receiver进程的宿主PostgreSQL(也称为Standby)接受到WAL日志后,在自身的数据库上还原,生成一个和发送端的PostgreSQL(也称为Master)完全一样的数据库。

Writer process

Writer process在适当的时间点把共享内存上的缓存写往磁盘,通过这个进程,可以防止在检查点的时候(checkpoint),大量的往磁盘写而导致性能恶化,使得服务器可以保持比较稳定的性能,Background writer起来以后就一直常驻内存,但是并非一直在工作,它会在工作一段时间后进行休眠,休眠的时间间隔通过postgresql.conf里面的参数bgwriter_delay设置,默认是200微秒。

这个进程的另外一个重要的功能是定期执行检查点(checkpoint)。检查点的时候,会把共享内存上的缓存内容往数据库文件写,使得内存和文件的状态一致。通过这样,可以在系统崩溃的时候可以缩短从WAL恢复的时间,另外也可以防止WAL无限的增长。可以通过postgresql.conf的checkpoint_segments、checkpoint_timeout指定执行检查点的时间间隔。

WAL writer process

WAL writer process把共享内存上的WAL缓存在适当的时间点往磁盘写,通过这样,可以减轻后端进程在写自己的WAL缓存时的压力,提高性能。另外,非同步提交设为true的时候,可以保证在一定的时间间隔内,把WAL缓存上的内容写入WAL日志文件。

stats collector process

统计信息的收集进程。收集好统计表的访问次数,磁盘的访问次数等信息,收集到的信息除了能被autovaccum利用,还可以给其他数据库管理员作为数据库管理的参考信息。

Logger process

把postgresql的活动状态写到日志信息文件(并非事务日志),在指定的时间间隔里面,对日志文件进行rotate.

Archive process

Archive process把WAL日志转移到归档日志里。如果保存了基础备份以及归档日志,即使实在磁盘完全损坏的时候,也可以回复数据库到最新的状态。

postgresql目录说明

postgres的目录主要有两个,一个是pg的安装目录,另外一个就是存放数据文件和配置文件的目录,文档中叫做cluster's data directory,内核分析中译作数据集簇。数据集簇通常叫做PGDATA。每个数据库实例都会有一个PGDATA,每台机器上可以并存多个不同的实例。

postgresql安装目录结构:

  • bin 二进制可执行文件目录
  • include 头文件目录
  • lib 动态库目录
  • share 文档和配置模板文件

postgresql数据目录的结构:

base: 该目录包含数据库用户所创建的各个数据库,同时也包括postgres、template0和template1的 pg_defaulttablespace    

pg_xlog:该目录包含wal日志。  10.0后改名为pg_wal

pg_log: 该目录包含数据库日志。10.0改名为log

pg_clog:  该目录包含事务提交状态数据。  10.0后改名为pg_xact

global:  该目录包含集群范围的各个表和相关视图。 ( pg_database、 pg_tablespace )  

pg_multixact:  该目录包含多事务状态数据(等待锁定的并发事务)  

pg_notify :该目录包含LISTEN/NOTIFY状态数据。  

pg_serial:该目录包含了已经提交的序列化事务的有关信息。  

pg_snapshots:该目录包含导出的快照。  

pg_stat_tmp:该目录包含统计子系统的临时文件。  

pg_subtrans:该目录包含子事务状态数据。  

pg_tblspc:该目录包含表空间的符号链接。  

pg_twophase:该目录包含预备事务的状态文件。  

pg_commit_ts:该目录包含已提交事务的时间。  

pg_dynshmem:该目录包含动态共享内存子系统使用的文件。  

pg_logical:该目录包含逻辑解码的状态数据。  

pg_replslot:该目录包含复制槽数据。  

pg_stat:该目录包含统计子系统的永久文件。  

PG_VERSION:包含版本信息。  

日志文件目录说明

pg_log

该文件夹中的日志一般用来记录服务器与DB的状态,如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息等。linux自带的路径一般在/var/log/postgres下面。该日志有.csv格式和.log。这种日志是可以被清理删除不影响DB的正常运行。当我们有遇到DB无法启动或者更改参数没有生效时,第一个想到的就是查看这个日志。 如果服务无法启动,该日志文件夹下的日志没有记录,建议查看操作系统的事件查看器的日志。

pg_xlog

该文件夹中的日志是记录的Postgresql的WAL信息,也就是一些事务日志信息(transaction log),默认单个大小是16M,源码安装的时候可以更改其大小。这些信息通常名字是类似'000000010000000000000013'这样的文件,这些日志会在 定时回滚恢复(PITR), 流复制(Replication Stream)以及归档时能被用到,这些日志是非常重要的,记录着数据库发生的各种事务信息,不得随意删除或者移动这类日志文件,不然你的数据库会有无法恢复的风险 

当归档或者流复制发生异常的时候,事务日志会不断地生成,有可能会造成磁盘空间被塞满,最终导致DB挂掉或者起不来。遇到这种情况不用慌,可以先关闭归档或者流复制功能,备份pg_xlog日志到其他地方,但请不要删除。然后删除较早时间的的pg_xlog,有一定空间后再试着启动Postgres。 

pg_clog

pg_clog这个文件也是事务日志文件,但与pg_xlog不同的是它记录的是事务的元数据(metadata),这个日志告诉我们哪些事务完成了,哪些没有完成。这个日志文件一般非常小,但是重要性也是相当高,不得随意删除或者对其更改信息。

总结:

pg_log记录各种Error信息,以及服务器与DB的状态信息,可由用户随意更新删除

pg_xlog与pg_clog记录数据库的事务信息,不得随意删除更新,做物理备份时要记得备份着两个日志。

安装完成后如果没有pg_log目录,需要手动配置postgres.conf或者相应参数,才能生效;

与之相关的参数是:

logging_collector=on

log_directory=’pg_log’

后一个参数生效,必须是前一个参数设置为on,并且重启数据库;

猜你喜欢

转载自blog.csdn.net/a964921988/article/details/83900373