• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
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)数据填充到每个段文件。在段文件重新回收利用之前,会将数据保存到某些地方。

  下面是图中每个数字标签的解释。

  •   在数据库的归档模式,一旦预写式日志(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的敬请期待。