【无标题】

PostgreSQL的体系结构

PostgreSql主要有连接管理系统、编译执行系统、存储管理系统、事务系统、系统表5大部分组成,如下图所示

请添加图片描述

1. 系统表

1.数字字典时关系数据库系统管理控制信息的核心,在postgreSQl中系统表扮演者数字字典的角色
2.系统表是PostgreSql存放结果元数据的地方,存放系统信息普通表或视图,用户可以去修改这些表结构,但是又可能早成系统紊乱,所以不建议由人工维护,应交由系统自己维护
3.在postgreSql中每个数据库都有自己的一套系统表,在数据库创建时通过模板数据库模板中拷贝过来的
4.由于系统表中保存了数据库的所有元数据,所以系统运行时对系统表的访问是非常频繁的,为了提高系统新能,在内建中建立了共享的系统表CACHE,使用Hash函数和Hash表提高查询效率
  • 主要系统表功能及依赖关系

    • pg_namespace

      系统表 pg_namespace用于存储命名空间。命名空间SQL91模式下层的结构:每个名字空间有独立的关系,类型等集合,层次结构是:数据库.模式.表.属性
      访问对象时按一下名字空间顺序搜索
      - 特殊名字空间(special),仅用户创建模式
      - 临时表名字空间(TEMP)
      - 系统表名字空间
      
      属性名数据类型注释
      nspnameNameData(长度为64字节数组)用于存放命名空间的名称
      nsownerOid用于表示该命名空间的所有者,由于系统中每个用户也会分配一个Oid作为唯一标识,因此这里 nspower中只存储所有者的oid
      nspaclaclitem类型边长数据组其中存放对于该名字空间的访问权限表
    • pg_tablespace

      pg_tablespace存储表空间信息,将表放置在不同表空间有助于实施磁盘文件布局,在整个数据集族中只有一份,而不是每个数据库都要有自己的 pg_tablespace,这是一个共享表
      PostgreSql里的表空间允许用户在文件系统里自定义表数据库对象的存放位置,可以控制磁盘的布局,可以将数据分布到不同的磁盘位置上。在分配磁盘空间已满时,可将数据分配到其他磁盘存储,同时可以使用数据模式安排磁盘位置,优化性能。
      
      属性名数据类型注释
      spcnameNameData表存储空间
      spcownerOid表示该表空间的所有者,通常为创建表空间用户
      spclocationText( 实际是一种变长的字符串数据类型)用于存储表空间的物理位置(操作系统目录路径)
      spcalaclitem类型的变长数组存放对于该表空间的访问控制列表
    • pg_database

      pg_database中存放了当前数据集族中数据库的信息,它也是一个在整个集族范围共享的系统表,该表中每一个元组就是表示集族中的一个数据库,每个数据库都被分配一个OID最为唯一标识,并且存储在对应元组的隐藏属性中。
      
      属性名数据类型注释
      datnameNameData表示数据库的名称
      datdbaOid数据库的拥有者
      encodingint4该数据表示数据库的字符集编码,比如0表示sql_ascII编码,6表示UTF8编码
      datcollateNameData数据库LC_COLLATE 设置
      dattypeNameData数据库LC_TYPE 设置
      datistemplatebool该数据库是否可以作为创建其他数据的模板
      datconnlimitint4数据库允许的最大并发连接数,如果为-1表示对并发没有限制
      datlastsysoidOid数据库中使用的最后的OID,在使用pg_dump时特别有用
      datfrozenxidTransactionld数据库中所有在这个事务ID之前的事务都被替换为一个永久“冻结”的ID,该属性用来跟踪该数据库是否需要进行vacuum(清理)操作
      dattablespaceOid数据库所在的表空间
      datcongiftext类型动态数组数据库定义的GUI 参数
      Daraclaclitem类型的变长数组存放对于该数据库的访问权限列表
    • pg_class

      pg_class存储表及与表类似结构的数据对象信息,包括索引、序列、视图、复合数据类型、TOAST表等
      

请添加图片描述
请添加图片描述

  • pg_type

    pg_type存储数据类型信息
    

请添加图片描述
请添加图片描述

  • pg_attribute

    pa_attributr存储表的属性信息,对于数据库中表中的每个属性都有一个元组
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdtKPkyR-1641737871642)(C:\Users\mzn45\AppData\Roaming\Typora\typora-user-images\image-20220109114938818.png)]请添加图片描述
    请添加图片描述

  • pg_index

    pg_index存储索引的具体信息
    

    请添加图片描述

  • 系统表之前的依赖关系图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5B3y6iru-1641737871644)(C:\Users\mzn45\AppData\Roaming\Typora\typora-user-images\image-20220109115342823.png)]请添加图片描述

2.数据集族

 PostgreSQL安装完成后,在做任何其他事之前,必须先使用initdb程序初始化磁盘上的数据存储区,即数据集族。由PpostSql管理用户的数据库及系统数据库总称为数据集族。在数据集族中OID唯一标识一个数据库对象,这些对象可以是数据库、表、索引、视图、元组、类型等。
 初始化数据集族包括创建数据系统所有数据的数据目录,创建共享的系统表,创建其他的配置文件和控制文件、并穿件三个数据库:模板数据库template1和template0、默认用户的数据库postgre.以后创建数据库时,template1中的内容都会被拷贝到之后创建的数据库中。而template0和postgre都是通过拷贝template1创建的
 在每个具体的数据库在PGDATA/base下都会有一个对应的子目录,名字是该数据库系统表pg_database里的OID,每个索引都存储在所属数据库目录下的独立文件中,以该表或者索引的filenode号命名,该号被记录在该表的索引或系统表pg_calss中对应元组的refilenode属性中。表或索引超过1G后会拆分,后面的命名会递增,如refilenode1,refilenode2..
 在表中存储较大的数据时,会有一个TOAST表以之关联,用于存储无法在数据行中放置的超大外置数据表,对应pg_class元组的reltoastrelid属性,记录了TOAST表的OID

请添加图片描述

3.守护进程

  多用户模式下一个数据库实例由数据库服务器守护进程Postmaster来管理。它是一个运行在服务器上的总控进行,负责整个系统的启动和关闭,并且在服务进程出现错误时完成系统的回复。它管理数据库文件、监听并接收来自客户端的连接请求。并为客户端连接请求fork一个Postgres服务进程,来代表客户端在数据库上执行各种命令,同时还管理与数据库运行相关的辅助进程。
  • 初始化内存上下文

    内存上下文释放时会释放在其中分配的所有内存,这样即使某些内存没有被任何指针指向或忘记释放,我们都可以通过释放内存上下文来避免内存泄漏。
    
  • 配置参数

      GUC模块实现了多种数据类型的变量配置。这些参数可能会由不同的进程在不同的时机进行配置,系统会根据既定的优先权来确定什么情况下的配置参数可以生效
    
  • 监听套接字

      Postmaster首先调用SplitIdentifierString函数解析字符串ListenAddresses.得到多个服务器IP地址并构成一个list,然后取出每一个服务器地址,调用函数StreamServerPort在该地址上创建一个监听套接接口。并将返回的套接子描述符保存在整个数组ListenSocket的第一个值为-1的单元中 
    
  • 注册信号处理函数

     通过信号处理函数,来控制整个系统的启停以及异常的处理
    

4.辅助进程

PostgreSQL的各个辅助进程完成特定的功能,支撑PostgreSQL系统和管理工作。在Postmaster进程中,为每个辅助进程设置了一个全局变量来表示进程号,并且每个进程号对应的值都为0,只有系统日志辅助进程在Postmaster进入监听循环之前都完成启动操作,在循环监听ServerLoop中,每次循环时都会检测各个辅助进程对应变量值是否为0,然后启动对应的复杂进程

5.服务进程Postgres

  Postgres进程是实际的接受查询请求并调用相关模块处理查询的PostgreSqQL服务进程。它直接接受用户的命令进行编译执行,并将结果返回给用户。用户命令分为两种:一种是查询命令、即插入、删除、更新和选择四种命令。另一种是非查询命令,如创建/删除表、视图、索引等领了,服务进程根据不同的命令类型选择不同的策略进行处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值