PostgreSQL 9.0 内存与进程
发布日期:2016-4-15 13:4:36
PostgreSQL 9.0 内存与进程 在PostgreSQL构架基础上进一步了解,在这里,我将会通过信息链接讨论关于实用进程与内存。许多提交者已经好好地记录了关于进程与内存,在这里有提供链接。在我这里有适当关于PostgreSQL实用进程的描述。想要关注mysql的敬请期待。 每个PostgreSQL实例的启动就会有一组实用进程(包括强制性和可选性进程)与内存。两个强制性进程(bgwriter后台写进程和walwriter预写式日志写进程)。你可以通过命令ps -ef | grep postgres检测一下,结果如图1所示 图1 一、进程与内存概要 图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系统日志进程或叫日志进程 : 图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归档进程: 图4 归档进程是可选进程,默认是关闭的。 如图4所示是从我观察PostgreSQL的归档进程而制作的。设置数据库为归档模式,意味着捕捉预写式日志(WAL)数据填充到每个段文件。在段文件重新回收利用之前,会将数据保存到某些地方。 下面是图中每个数字标签的解释。
不用说,如果在$PGDATA/pg_xlog/archive_status目录里有任何名为”段-文件名.ready”的文件都是正等待着被复制到归档目的地里(我注:通过参数archive_command来指定)。 更多关于参数与归档的信息,参看以下链接。 http://www.enterprisedb.com/docs/en/9.0/pg/continuous-archiving.html 请把你的意见或者建议提交在这篇文章中,将不胜感激。 想要关注mysql的敬请期待。 上一条: PostgreSQL 9.0 的构架 下一条: 限制MongoDB内网访问的方法
|