目录

第七章 PostgreSQL的核心架构

7.1 应用程序的访问

7.1.1 访问接口总体图

7.2 进程及内存结构

7.2.1 进程和内存架构图

7.2.2 主进程Postmater

7.2.3 SysLogger(系统日志)进程

7.2.4 BgWriter(后台写)进程

7.2.5 WalWriter(预写式日志写)进程

7.2.6 PgArch(归档)进程

7.2.7 AutoVacuum(自动清理)进程

7.2.8 PgStat(统计数据收集)进程

7.2.9 共享内存

7.2.10本地内存

7.3 目录结构

7.3.1 安装目录的结构

7.3.2 数据目录的结构

7.3.3 表空间的目录


第七章 PostgreSQL的核心架构

7.1 应用程序的访问

7.1.1 访问接口总体图

不同的编程语言使用不同的驱动程序连接到PostgreSQL 数据库上。总的来说这些驱动分为两类:
(1)使用纯语言实现的PostgreSQL驱动,如JDBC、.NET等方式。这种连接方式不需要libpq库。
(2)通过包装PostgreSQL的C语言接口库 libpq实现的驱动,比如,Python下的psycopg库、Perl的DBD::pg模块、ODBC等。所以在安装这些驱动之前,需要先安装Postgre-SQL的 libpq库。
一般情况下,各种应用程序都是通过TCP/IP连接到PostgreSQL数据库的。如果应用程序与数据库在一台机器上,也可以使用UNIX domain sockets连接到PostgreSQL数据库。

7.2 进程及内存结构

7.2.1 进程和内存架构图

7.2.2 主进程Postmater

7.2.3 SysLogger(系统日志)进程

在配置文件 postgresql.conf中有很多与日志相关的参数.这些参数后面进行介绍。其中,只有在参数logging_collect 设置为“on”时,主进程才会启动SysLogger辅助进程。
SysLogger辅助进程通过从Postmaster进程、所有的服务进程及其他辅助进程收集所有的stderr输出,并将这些输出写入到日志文件中。在postgresql.conf配置文件中设置了日志文件的大小和存在时间。当一个日志文件达到了配置中的大小或其他条件时,SysLogger就会关闭旧的日志文件,并创建一个新的日志文件。如果收到了装载配置文件的信号(SIGHUP),就会检查配置文件中的配置参数“log_directory”和“log_fileanme”是否与当前的相同,如果不相同,则会切换日志文件并使用新的配置。

7.2.4 BgWriter(后台写)进程

在PostgreSQL中,BgWriter辅助进程是把共享内存中的脏页写到磁盘上的进程。当往数据库中插人或更新数据时,并不会马上把数据持久化到数据文件中。这主要是为了提高插人、更新、删除数据的性能。BgWriter辅助进程可周期性地把内存中的脏数据刷新到磁盘中,刷脏数据既不能太快,也不能太慢。如果一个数据块被改变了多次,而此时刷新又太快,那么这些改变就每次都会被保存到磁盘中,这会导致I/O次数增多。在刷新太慢的情况下,若有新的查询或更新需要使用内存来保存从磁盘中读取的数据块,由于没有空闲空间来存储这些数据块,就需要把内存腾出来,即先把一些内存中的脏页写到磁盘中,这样就会导致查询或更新需要等更长的时间,自然也就降低了性能。上面提到的这些机制由以“bgwriter_”开头的配置参数来控制,后面的章节会详细介绍这些参数的作用。

7.2.5 WalWriter(预写式日志写)进程

WAL是 Write Ahead Log 的缩写,中文称之为预写式日志。WAL log 也被简称为xlogoWalWriter进程就是写WAL日志的进程。预写式日志的概念就是在修改数据之前,必须要把这些修改操作记录到磁盘中,这样后面更新实际数据时,就不需要实时地把数据持久化到文件中了。即使机器突然宕机或数据库异常退出,导致一部分内存中的脏数据没有及时地刷新到文件中,在数据库重启后,通过读取WAL日志,并把最后一部分的WAL日志重新执行一遍,就可以恢复到宕机时的状态。
WAL日志保存在pg_xlog 下。每个xlog文件默认是16MB,为了满足恢复要求,在xlog目录下会产生多个WAL日志,这样就可保证在宕机后,未持久化的数据都可以通过WAL日志来恢复,那些不需要的WAL日志将会被自动覆盖。

7.2.6 PgArch(归档)进程

WAL日志会被循环使用,也就是说,较早时间的WAL日志会被覆盖。PgArch归档进程会在覆盖前把WAL日志备份出来。PostgreSQL 从8.X版本开始提供了PITR ( Point-In-Time-Recoery)技术,通俗的说,就是在对数据库进行过一次全量备份后,该技术将备份时间点之后的WAL日志通过归档进行备份,使用数据库的全量备份再加上后面产生的WAL日志,即可把数据库向前推到全量备份后的任意一个时间点了。

7.2.7 AutoVacuum(自动清理)进程

在PostgreSQL数据库中,对表进行DELETE操作后,旧的数据并不会立即被删除。并且,在更新数据时,也并不会在旧的数据上做更新,而是新生成一行数据。这在前面“锁”相关章节中已有所介绍,称之为多版本。此时,旧的数据只是被标识为删除状态,只有在没有并发的其他事务读到这些旧数据时,它们才会被清除掉。这个清除工作就是由Auto Vacuum进程来完成的。

7.2.8 PgStat(统计数据收集)进程

PgStats辅助进程主要做数据的统计收集工作。收集的信息主要用于查询优化时的代价估算,这些信息包括在一个表和索引上进行了多少次插人、更新、删除操作,磁盘块读写的次数,以及行的读次数。系统表pg_statistic中存储了PgStat收集的各类统计信息。

7.2.9 共享内存

PostgreSQL启动后,会生成一块共享内存,共享内存主要用做数据块的缓冲区,以便提高读写性能。WAL日志缓冲区和CLOG(Commit log)缓冲区也存在于共享内存中。除此以外,一些全局信息也保存在共享内存中,如进程信息、锁的信息、全局统计信息,等等。
PostgreSQL 9.3之前的版本与Oracle数据库一样,都是使用“System V”类型的共享内存,但到PostgreSQL9.3之后,PostgreSQL使用“mmap()”方式的共享内存。使用这种共享内存的好处是不再需要配置“System V”共享内存的内核参数“kernel.shmmax”和“kernel.shmall”,就能使用较大的共享内存。

7.2.10本地内存

后台服务进程除访问共享内存外,还会申请分配一些本地内存,以便暂存一些不需要全局存储的数据。这些内存缓冲区主要有以下几类。
(1)临时缓冲区:用于访问临时表的本地缓冲区。
(2)work _mem:内部排序操作和Hash表在使用临时磁盘文件之前使用的内存缓冲区。
(3)maintenance_work_mem:在维护性操作(比如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY等)中使用的内存缓冲区。

7.3 目录结构

7.3.1 安装目录的结构

PostgreSQL软件通常安装在/usr/local目录下,当然也可以安装在其他目录下。

7.3.2 数据目录的结构

一般使用环境变量PGDATA指向数据目录的根目录。这个目录是在安装时指定的,所以在安装时需要指定一个合适的目录作为数据目录的根目录,而且,每一个数据库实例都需要有这么一个目录。目录的初始化是使用initdb来完成的。完成后,这数据根目录下就会生成三个配置文件。
(1)postgresql.conf:数据库实例的主配置文件,基本上所有的配置参数都在此文件中。
(2)pg_hba.conf:认证配置文件,配置了允许哪些IP的主机访问数据库,认证的方法是什么等信息。
(3)pg_ident.conf:"ident"认证方式的用户映射文件。此目录下还会生成如下一些子目录。
(4)base:默认表空间的目录。
(5)global:一些共享系统表的目录。
(6)pg_clog: commit log的目录。
(7)pg_log:系统日志目录,在查询一些系统错误时就可查看此目录下的日志文件。
(8)pg_stat_tmp:统计信息的存储目录。
(9)pg_tblsp:存储了指向各个用户自建表空间实际目录的链接文件。
(10)pg_twophase:使用两阶段提交功能时分布式事务的存储目录。
(11)pg_xlog: WAL日志的目录。

7.3.3 表空间的目录

PostgreSQL修炼之道之PostgreSQL的核心架构(十一)相关推荐

  1. postgresql修炼之道_PostgreSQL内核开发学习资料

    我自2011年便开始进行PostgreSQL内核开发岗,在公司内也算是时间比较久了,带了一些新人入门,总结了一些不同阶段需要学习的资料. 我将PostgreSQL内核知识划分为3层: 数据库基础对象, ...

  2. 荐书送书丨《PostgreSQL实战》、《PostgreSQL修炼之道:从小工到专家(第2版)》...

    墨墨导读:最近,相信大家都注意到数据库行业大事记,PostgreSQL在2020年的DB-Engines 排名中获得了比其他360个受监控数据库系统更多的受欢迎程度,获得"2020年度数据库 ...

  3. PostgreSQL修炼之道:从小工到专家

    数据库技术丛书 PostgreSQL修炼之道:从小工到专家 唐成著 图书在版编目(CIP)数据 PostgreSQL修炼之道:从小工到专家/唐成著. -北京:机械工业出版社,2015.4 (数据库技术 ...

  4. postgresql修炼之道_PostgreSQL的TOAST技术

    本文参考: PostgreSQL TOAST 技术理解 <PostgreSQL修炼之道> 一.TOAST是什么? TOAST是"The Oversized-Attribute S ...

  5. PostgreSQL修炼之道:从小工到专家. 导读

      数据库技术丛书 PostgreSQL修炼之道:从小工到专家 为什么要写这本书 PostgreSQL数据库是目前功能最强大的开源数据库,它基本包含了其他所有商业或开源的数据库中能找到的功能,甚至还包 ...

  6. 《PostgreSQL修炼之道-从小工到专家》读书笔记

    PostgreSQL数据库 索引 事务特性 事务隔离级别: 三种问题 四种隔离级别 PostgreSQL中的事务隔离 多版本并发控制(MVCC) MVCC用到的系统字段 事务状态 PostgreSQL ...

  7. PostgreSQL修炼之道:从小工到专家. 3.1 SQL语句语法简介

    3.1 SQL语句语法简介 3.1.1 语句的分类 SQL命令一般分为DQL.DML.DDL几类. DQL:数据查询语句,基本就是SELECT查询命令,用于数据查询. DML:Data Manipul ...

  8. PostgreSQL修炼之道之SQL语言入门(四)

    目录 第三章 SQL语言入门(二) 3.4 查询语句 3.4.1 单表查询语句 3.4.2 过滤条件的查询 3.5 其他SQL语句 3.5.1 INSERT INTO... SELECT语句 3.5. ...

  9. <POSTGRESQL修炼之道:从小工到专家>之PostgreSQL中执行计划(1-3结)

    文章目录 一.执行计划的解释 1.EXPLAIN命令 2.EXPLAIN输出结果解释 3.EXPLAIN使用示例 4.全表扫描 5.索引扫描 6.位图扫描 7.条件过滤 8.Nestloop Join ...

最新文章

  1. 网络丢包现象分析处理指导书5
  2. 常用特征工程方法总结
  3. GT Transceiver中的重要时钟及其关系(2)单个外部参考时钟使用模型
  4. 如何创建一个完美的单例模式
  5. vue 组件库发布_如何创建和发布Vue组件库
  6. 一张图解释什么是遗传算法_遗传算法简介及代码详解
  7. java nio 详_java nio详解
  8. 《肖申克的救赎》--[美]斯蒂芬·金
  9. requestAnimationFrame()方法实现帧动画
  10. 【背包问题】基于matlab离散粒子群算法求解背包问题【含Matlab源码 423期】
  11. nsis升级包_NSIS制作软件升级安装包 - 卡饭网
  12. 两种MBR分区表恢复方法
  13. B站UP主自制的开源OCR翻译器走红Github,用一次就粉了
  14. html表格中如何画单元格中对角线
  15. Android 中Goolgle 相关服务的移植[转]
  16. 生活家健康指南:创可贴使用四大误区
  17. 新世纪大学英语(第二版)综合教程第一册 Unit 3 (中英翻译和重点单词)
  18. qq邮箱发送html文本,使用qq邮箱发送html格式的邮件
  19. 那些以玩笑说出口的话,往往是最真的表达
  20. 2009年7月自考马克思主义基本原理概论模拟试题及答案(一)

热门文章

  1. 2021.7 纪中快乐游记(上)
  2. 简单shell命令学习(一)
  3. 【iOS与EV3混合机器人编程系列之二】工欲善其事,必先利其器(准备篇)
  4. 在二维码上添加图片主题(支持链接跳转)
  5. 基石为勤能补拙的迷宫之旅——第八天(Python文件操作)
  6. 金融工资和计算机工资待遇,【成都京东金融工资】计算机待遇-看准网
  7. 模型机设计(学习笔记)
  8. 如何从小白起步成为百万博主|配音运营工具必不可少
  9. adam优化_PyTorch 学习笔记(七):PyTorch的十个优化器
  10. Facebook因隐私设置获“老大哥”奖,有人想过它一直模仿的微信吗?