PostgreSQL进程分析

一、PostgreSQL进程

PostgreSQL进程分析_第1张图片

        PostgreSQL是一个C/S架构的数据库管理系统,一个服务器上运行多个进程。postmaster是pg的主进程,也是父进程。后端进程和后台工作进程都是由主进程派生出来,同时具有监听功能。数据库的功能和管理是通过后台工作进程来实现的。

  • logger process

日志进程。把postgresql的活动状态写到日志信息文件(并非事务日志),在指定的时间间隔里面,对日志文件进行rotate。每一个进程信息都会被记录在pgdata/pg_log目录下的.log文件里。

注意:如果数据目录是通过 INITDB 命令创建的,pg_log 目录不会在数据目录里自动创建,需要显示地创建该目录。

  • checkpointer process

检查点进程,各种类型的检查点实现,有点儿类似于虚拟机的快照。检查的作用主要是缩短数据库恢复的时间。

 

  • writer process

    Writer process在适当的时间点把共享内存上的缓存写往磁盘。 通过这个进程,可以防止在检查点的时候(checkpoint),大量的往磁盘写而导致性能恶化,使得服务器可以保持比较稳定的性能。
        Background writer起来以后就一直常驻内存,但是并非一直在工作,它会在工作一段时间后进行休眠,休眠的时间间隔通过postgresql.conf里面的参数bgwriter_delay设置,默认是200微秒。
        这个进程的另外一个重要的功能是定期执行检查点(checkpoint)。检查点的时候,会把共享内存上的缓存内容往数据库文件写,使得内存和文件的状态一致。通过这样,可以在系统崩溃的时候可以缩短从WAL恢复的时间,另外也可以防止WAL无限的增长。可以通过postgresql.conf的checkpoint_segments、checkpoint_timeout指定执行检查点的时间间隔。

  • wal writer process

        预写式日志写进程。预写式日志写进程在适当间隔时会写入并进行文件同步。为了保证事务安全,预写式日志缓冲区在事务日志里持有数据库的更改操作。预写式日志缓冲区在每次事务提交时写到磁盘,预写式日志写进程负责写到磁盘。

  • autovacuum launcher process

        自动清理启动器进程。自动清理进程是一个可选进程,默认是开启的。为了自动执行VACUUMANALYZE命令,自动清理启动器进程是由许多被称为autovacuum workers(自动清理工作者)组成的后台进程。自动清理启动器进程负责启动autovacuum workers(自动清理工作者)进程来处理所有数据库。启动器会按交叉时间地分发工作,在每个时间间隔里会试图在每一个数据库里启动一个工作者(我注:指autovacuum workers),通过参数autovacuum_naptime来设置间隔时间。每个数据库都会启动一个工作者,通过参数autovacuum_max_workers来设置最大数。每一个工作者进程都会在它所在的数据库里检查每一张表,然后在有需要的时候执行VACUUM或者ANALYZE命令。

  • stats collector process

状态收集进程。状态收集进程会收集一些关于服务器运行的信息,包括表的访问次数,磁盘的访问次数等信息。收集到的信息除了能被autovaccum利用,还可以给其他数据库管理员作为数据库管理的参考信息。    
 

二、模式

1.模式

    模式是一个命名空间,位于数据和表、视图之间,不同的模式下可以有相同名称的表、函数等对象。只要有权限,不同模式(schema)中的对象可以互相调用。PostgreSQL中模式的概念类似java中的namespace。

2.模式的用途

  • 允许多个用户使用同一个数据库又不会干扰其他用户。

  • 把数据库对象放在不同的模式下,相当于组织成逻辑组,让它们更便于管理。

  • 第三方的应用可以放在不同的模式中,这样就不会和现有的对象的名字冲突了

3.公共模式

创建和访问表的时候都不用指定模式,实际上这时访问的都是“public”模式。当我们创建一个新的数据库时,PostgreSQL都会为我们默认创建一个名为“public”的模式

PostgreSQL进程分析_第2张图片

三、日志及客户端

PostgreSQL的日志存储在/data/pg_log目录下(如/var/lib/pgsql/9.6/data/pg_log),出问题后需要及时查看。

在服务器上常用的客户端是psql,可以直接连接然后查看数据库。常用命令有:

psql   直接连接数据库
psql  -p 5433 指定端口
\?  查看internal commands的用法
\h  查看sql commands的帮助
\l  list databases
\d  list tables,views,and sequences
\dt [pattern] list tables
\x   toggle expanded output
\i   file execute command from file

你可能感兴趣的:(PostgreSQL)