理解PostgreSQL的体系结构

  • 时间:
  • 浏览:1

Note: 表空间在使用分区表的环境中也非常有用。由于着着可不不能否为每个分区表使用不同的表空间,这俩这俩可不不能否更灵活存在理文件系统容量间题。

Vacuum做了如下哪此事

PostgreSQL由于着着是开源关系数据库市场中最先进的数据库。1989年首次发布,从此有了一定量的改进和功能增强。根据db-engine统计,截止到目前,PostgreSQl在最常使用的数据库中,排名第四。

WAL:Write-Ahead Logging 预写日志

创建表和索引时的文件名是OID。OID和pg_class.relfilenode是相同的。

否则,当执行重写操作(Truncate、CLUSTER、Vacuum Full、REINDEX等)时,将更改受影响对象的relfilenode值,文件名也将更改为relfilenode值。您可不不能否使用pg_relation_filepath ('< object name >')轻松地检查文件位置和名称。

我们歌词 都都 由于着着讨论PostgreSQL的内控 形状,体系形状以及各种组件之间的交互。这篇文章将作为我们歌词 都都 后续的PostgreSQL DBA博客系列文章的起点和组成。

我们歌词 都都都 尝试理解PostgreSQL的数据库形状时,有如下哪此重要的事情须要了解

由于着着在initdb()然后 查询pg_database视图,可不不能否看后由于着着创建了template0、template1和postgres数据库。

pg_default表空间的位置是$PGDATAbase。这俩目录中一个 按数据库OID划分的子目录

PostgreSQL在创建表空间时指定一个 目录。否则,由于着着目录所在的文件系统已满,则可不不能否了再存储数据。要出理 这俩间题,可不不能否使用卷管理器。否则,由于着着可不不能否了使用卷管理器,可不不能否考虑更改表空间位置。操作顺序如下。

WAL buffer 是一个 临时存储数据更改的缓冲区,存储在WAL buffer 中的内容将在预定的时间点写入WAL文件。

从备份和恢复的角度,WAL buffer和WAL文件是非常重要的。

共享内存是指提供数据缓存和事务日志缓存的内存。在共享内存中最重要的组成每段是shared Buffer和WAL buffer(Write-Ahead Logging)

PostgreSQL一种类型的线程池池

共享缓冲区的主要目的是最大限度的减少磁盘IO.为达到这俩目的,须要要满足如下的哪此要求

Postgmaster线程池池是PostgreSQL启动的第一个 线程池池。

负责实施恢复,初始化共享内存,并启动后台线程池池。

当客户端线程池池有链接请求时,负责创建后端线程池池。

PostgreSQL操作所需的后台线程池池列表如下。

pg_global 表空间

pg_global表空间是用于存储要在“数据库集群”级别管理的数据的表空间。

由于着着在initdb()然后 查询pg_tablespace,可不不能否看后由于着着创建了pg_default和pg_global表空间。

每个表对应一个 文件

客户端线程池池是指为每个后端用户连接分配的后台线程池池。通常,postmaster线程池池将创建一个 子线程池池,该子线程池池专用于服务于用户连接。

1和2通常是DBMS管理所必需的。否则3和4是必要的,由于着着PostgreSQL MVCC形状

由于着着使用pstree命令检查线程池池之间的关系,让他发现Postmaster是所有线程池池的父线程池池。(pstree命令暂且显示线程池池的名称,为了解释清晰,我增加了线程池池的名称和参数)

用户数据库由复制template1数据库创建。要验证这俩点,请在template1数据库中创建一个 用户表T1。创建mydb01数据库然后 ,检查T1表算不算存在。

$PGDATA/pg_tblspc目录中的符号链接指向表空间目录。

PostgreSQL的物理形状非常简单。它是由共享内存(shared memory)和一定量的后台线程池池以及数据文件组成。

后端线程池池的最大数量取决于max_connections参数的设置,默认值是50。

后端线程池池执行用户的查询请求,否则传输结果。

执行查询操作须要这俩特定的内存形状,我们歌词 都都 称为本地内存。

与本地内存相关的主要参数