mysql postgresql 内存_PostgreSQL 9.0 内存与进程

PostgreSQL 9.0 内存与进程

在PostgreSQL构架基础上进一步了解,在这里,我将会通过信息链接讨论关于实用进程与内存。许多提交者已经好好地记录了关于进程与内存,在这里有提供链接。在我这里有适当关于PostgreSQL实用进程的描述。想要关注mysql的敬请期待。

每个PostgreSQL实例的启动就会有一组实用进程(包括强制性和可选性进程)与内存。两个强制性进程(bgwriter后台写进程和walwriter预写式日志写进程)。你可以通过命令ps -ef | grep postgres检测一下,结果如图1所示

cfb0833cd5b2d14f119d2df53e0c3aa2.png

图1

一、进程与内存概要

c4722fb09401b1bb4302239ed310e73f.png

图2

如图2所示的 ,表明了进程附加到PostgreSQL共享内存。

1.BGWriter/Writer Process后台写进程或叫写进程:

后台写进程或叫写进程,这是一种强制性进程:

所有PostgreSQL服务器进程从磁盘读取数据然后将它们移到共享缓冲池(Shared Buffer Pool)里。 共享缓冲池使用ARC算法或LRU(最近最少使用)机制来淘汰页数据。BGWRITER后台写进程很多时候都是在休眠,但是每次唤醒,它通过搜索共享缓冲池(Shared Buffer Pool)来寻找被修改的页。每次搜索完之后,BGWRITER后台写进程就会选择那些被修改的页,将它们写到磁盘,然后将它们从共享缓冲池里淘汰出来。后台写进程通过三个参数BGWRITER_DELAY、BGWRITER_LRU_PERCENT以及BGWRITER_LRU_MAXPAGES来控制。以下是链接

http://www.enterprisedb.com/docs/en/9.0/pg/kernel-resources.html

http://www.enterprisedb.com/docs/en/8.4/pg/runtime-config-resource.html

2.WAL Writer Process预写式日志写进程:

预写式日志写进程是一个强制性进程。

预写式日志写进程在适当间隔时会写入并进行文件同步。为了保证事务安全,预写式日志缓冲区在事务日志里持有数据库的更改操作。预写式日志缓冲区在每次事务提交时写到磁盘,预写式日志写进程负责写到磁盘。WAL_WRITER_DELAY参数是用于调用预写式日志写进程的,然而,还有其他参数同样会使预写式日志写进程比较繁忙。以下是链接。

http://www.enterprisedb.com/docs/en/8.4/pg/wal-configuration.html

3.Stats Collector Process状态收集进程:

状态收集进程是可选进程,默认是开启的。

状态收集进程会收集一些关于服务器运作的信息。它会计算访问表与索引二者磁盘块的数量和个别的行项数(注:一个block有可能多个row item,可以通过 select ctid from tbname来查看,第一个数字就是block数,第二个就是row item数)。它同样会跟踪每一个表的总行数,每一个表关于VACUUM(清理)与ANALYZE(分析)动作的信息。收集这些统计数据会对查询执行有额外的开销,自己决定收不收集这些信息。下面的链接有更多关于状态收集进程和相关参数的说明。

http://www.enterprisedb.com/docs/en/9.0/pg/monitoring-stats.html

4.Autovacuum Launcher Process自动清理启动器进程:

自动清理进程是一个可选进程,默认是开启的。

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

http://www.enterprisedb.com/docs/en/8.4/pg/runtime-config-autovacuum.html

5.Syslogger Process / Logger Process系统日志进程或叫日志进程 :

c2aca87a41b5d796dd525b673a395cbd.png

图3

日志是一个可选进程,默认是关闭的。

如图3所示, 可以清楚地理解所有 实用进程+用户后台进程 + Postmaster守护进程都附加到系统日志进程来记录这它们的活动信息。每一个进程信息都会被记录在PGDATA/pg_log 目录下的.log文件里。

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

调试更多的进程信息会将会导致服务器的一些额外开销。总是建议日志是最低级别的,如果有要求的话再提高调试级别。下面的链接有更多关于日志参数的说明。

http://www.enterprisedb.com/docs/en/8.4/pg/runtime-config-logging.html

6.Archiver Process归档进程:

1b79df5a7180cc175d022c470baa3f64.png

图4

归档进程是可选进程,默认是关闭的。

如图4所示是从我观察PostgreSQL的归档进程而制作的。设置数据库为归档模式,意味着捕捉预写式日志(WAL)数据填充到每个段文件。在段文件重新回收利用之前,会将数据保存到某些地方。

下面是图中每个数字标签的解释。在数据库的归档模式,一旦预写式日志(WAL)数据填充满了预写式日志(WAL)段文件,填充满的段文件会被预写式日志写进程(WAL Writer)在目录$PGDATA/pg_xlog/archive_status下创建一个后缀为”.ready”的文件。文件名将会是“段文件名.ready”。

归档进程就会触发去查找那些被预写式日志写进程创建的“.ready”状态的文件。归档进程选择那些后缀是”.ready”的”段_文件号”文件,然后从$PGDATA/pg_xlog复制这些文件到archive_command参数(在postgresql.conf)指定的目的地里。

成功地从源目录复制到目的目录,归档进程会重命名”段-文件名.ready”为段-文件名.done。这就完成了归档的过程。

不用说,如果在$PGDATA/pg_xlog/archive_status目录里有任何名为”段-文件名.ready”的文件都是正等待着被复制到归档目的地里(我注:通过参数archive_command来指定)。

更多关于参数与归档的信息,参看以下链接。

http://www.enterprisedb.com/docs/en/9.0/pg/continuous-archiving.html

请把你的意见或者建议提交在这篇文章中,将不胜感激。

想要关注mysql的敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值