• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
PostgreSQL 9.0 的构架
发布日期:2016-4-15 13:4:7

  PostgreSQL 9.0 的构架

  在这里我很高兴发布我的第一篇博客,是关于 PostgreSQL 构架的。

  在之前很长一段时间里,我在工作、学习上都广泛地接触各种数据库,比如说mysql,redis等,但最感兴趣的还是PostgreSQL。作为一个初学者,想到尝试给出一张关于 PostgreSQL 的架构图。PostgreSQL构架包括几部分:内存、进程与文件存储系统,这难以在一张图里展示所有东西。我只有尽我所能地给出一个关于PostgreSQL构架的概要。

  在我们的PostgreSQL提交者(Heikki,Robert Haas,Bruce)的帮助下完成了大部分的设计, 从他们身上我学习到了很多关于PostgreSQL内部的东西。 非常感谢他们,是他们的协作让我了解到关于PostgreSQL的一切。我不是黑客,也不是构架师,仅仅是为PostgreSQL新手写了一篇文章。请留下你的评论、建议或者发现到我写文章的任何错误也可留言。


  图1

  一、PostgreSQL 9.0 构架概述

  PostgreSQL实例由一系列进程与内存组成。PostgreSQL 使用一个简单的 “每个用户一个进程” 的 客户/服务器 模型。PostgreSQL 有许多种类型进程。

  1.   postmaster进程,是后台监听进程,postmaster附加到共享内存段(我注:其实就是通过共享内存来进行进程间的通信),但是尽量避免访问它(我注:避免我们自定义去访问该共享内存,而是由PG内部各进程进行协调)。
  2.   实用进程(bgwriter后台写进程,walwriter预写式日志写进程,syslogger系统日志进程,archiver归档进程,statscollector状态收集器进程 以及 autovacuum自动清理进程)以及
  3.   用户后台进程(postgres进程自身,服务器进程)

  当有一个客户端请求连接到数据库时,首先,请求被postmaster后台进程执行身份认证,受权之后会复制一个服务器后台进程(postgres进程)来处理该请求。从那时起,客户端进程和服务器端进程进程通信,而不再需要postmaster介入。因此,postmaster进程是一直在运行的,一直等待连接请求,然而客户端与服务器端进程会继续进行通信。libpq库允许一个单客户端连接到多个服务器进程。

  然而,每个后台进程都是单线程的,一次仅仅只能执行一条查询;因此,任何的一个前端-后台连接都是单线程的。postmaster进程与postgres进程都是以PostgreSQL的”超级用户”身份的用户ID来运行的。每个打开数据库的会话里都会存在一个postgres进程。一旦经过身份验证的用户连接,它就会与共享内存直接连接(与谁,目的是做什么)。

  二、内存

  1.   Shared Buffers,共享缓冲区
  2.   WAL Buffers,预写式日志缓冲区
  3.   clog Buffers,是一种 SLRU 类型的缓冲区(Commit log,提交日志缓冲区)
  4.   Other Buffers,其他缓冲区

  PostgreSQL共享内存是非常大的并且所有缓冲区都没有同步的,意味着这都是独立的。一些专家/提交者已经将他们的大量关于PostgreSQL的经验信息放在网站上。结合PostgreSQL文档与这个构架图就会对PostgreSQL构架的有个基础的了解。下面的链接有更多概述.

  1.   http://www.postgresql.org/docs/9.0/interactive/runtime-config-resource.html
  2.   http://www.enterprisedb.com/docs/en/8.4/pg/runtime-config-resource.html
  3.   http://www.postgresql.org/files/documentation/books/aw_pgsql/hw_performance/0.html

  三、实用进程:

  •   强制性进程:这些进程是没有选项来 开启/关闭 的
  1.   BGWriter
  2.   WAL Writer
  •   可选进程:这些进程是有选项来 开启/关闭 的
  1.   Stats-collector,状态收集进程
  2.   Autovacuum launcher,自动清理进程
  3.   Archiver,归档进程
  4.   Syslogger,系统日志进程
  5.   WAL Sender,预写式日志发送进程
  6.   WAL Receiver,预写式日志接收进程

  不久,我将会提交一张关于实用性进程与用户后台进程的概要图。若想要了解更多关于mysql的问题的朋友,也请期待