• postgres 数据库架构介绍--1


    简介

       postgres 数据库是目前最流行的开源关系型数据库之一,其具有丰富的数据类型、多版本并发控制、同步/异步流复制、嵌套事务和预写式日志等功能,广泛地应用于金融、物流、制造/电信等领域

    基本概念

    1 数据库cluster[逻辑]
    database cluster:包含各种数据库对象,如表,索引,视图,索引,函数和序列等
    在这里插入图片描述
    2 数据库cluster [物理]
    在这里插入图片描述

    filesdescription
    PG_VERSION包含postgres的版本号信息
    pg_hba.conf客户端认正配置文件
    pg_ident.confpostgres 用户名映射文件
    postgresql.confpostgres 配置文件,包含各种参数设置:共享内存大小,最大连接数等
    postgresql.auto.conf更改系统时存放各种配置参数信息
    subdirectoriesdescription
    base创建数据库所在目录
    global全局系统表,pg_class和pg_control等
    pg_xact事务提交状态日志
    pg_dynshmem记录动态共享内存信息
    pg_logical存放逻辑解析过程中生成的数据
    pg_wal存放预写式日志
    pg_stat统计信息的持久性文件
    pg_subtrans存放子事务状态日志
    pg_twophase存放两阶段提交事务状态信息
    架构介绍

    1 进程架构
      postgres数据库是一个多进程架构,采用典型服务端–客户端结构,进程间通过共享内存进行通信。其中最重要的两个进程server process (postmaster)和backend process. postmaster 负责整个系统的启动与关闭,管理整个数据库集群,同时接收来自客户端的连接请求,后fork出一个服务进程backend process. postmaster 为客户端提供服务,执行客户端的各种命令。
      此外postmaster进程还启动一些辅助进程共同实现数据库的各种功能。

    1. background writer:后台写进程,负责将缓冲池的脏页数据写回磁盘,
    2. checkpointer:检查点,每隔一定周期将脏页刷盘,包括共享缓冲池和SLRU脏数据
    3. autovacuum:自动清理进程,用于回收被删除元组空间,避免数据文件无限膨胀
    4. WAL writer: WAL写进程,负责将wal buffer 刷写至磁盘,缓解业务高峰时日志的并发写入,对数据库性能造成影响
    5. statistics collector:信息收集进程,负责收集数据库系统运行的统计信息,主要用于查询优化时的代价估算
    6. pgArch:日志归档进程,负责将WAL日志进行归档备份,加强数据库的高可靠性和高可用性,防止数据意外丢失。

    在这里插入图片描述
    如果许多客户端(如WEB应用程序)频繁地重复与PostgreSQL服务器的建立连接与断开,就会增加建立连接和创建后端进程的成本,因为PostgreSQL没有实现本地连接池特性。这种情况会对数据库服务器的性能产生负面影响。要处理这种情况,通常使用池中间件(pgbouncer或pgpool-II)。

    2 共享内存架构
      在postgres数据库中,内存分为共享内存和私有内存[backend process]。
    私有内存主要由temp_buffers、work_mem和maintenance_work_mem组成

    typedescription
    temp_buffers存放执行过程中的临时数据或者临时表
    work_mem此区域用于ORDER by和DISTINCT操作,以及各种joins操作
    maintenance_work_mem此区域用于执行各种维护性操作如 VACUUM、REINDEX操作

    共享内存包括共享缓冲池、WAL buffer、SLRU

    typedescription
    shared buffer pool存放table和index数据页
    WAL buffer用于存放WAL日志,加载或者持久化
    SLRU(子)事务状态日志缓冲区,包括CLOG和SUBSTRANS

    在这里插入图片描述

    参考:https://www.interdb.jp/pg/pgsql01.html

  • 相关阅读:
    async,await总结
    18--Elasticsearch
    数据结构之<二叉搜索树>
    探索MATLAB在计算机视觉与深度学习领域的实战应用
    Go-Python-Java-C-LeetCode高分解法-第十一周合集
    LeetCode220803_70、在排序数组中查找元素的第一个和最后一个位置
    Kotlin 特殊字符处理
    行业洞察 | 你的语音小助手的词汇量够吗?
    tomcat的优化
    齐次变换矩阵、欧拉角
  • 原文地址:https://blog.csdn.net/qq_52668274/article/details/127133356