qidao123.com技术社区-IT企服评测·应用市场

标题: PostgreSQL体系架构知多少 [打印本页]

作者: 盛世宏图    时间: 5 天前
标题: PostgreSQL体系架构知多少
PostgreSQL体系架构知多少

Whoami:5年+金融、政府、医疗范畴工作经验的DBA
Certificate:PGCM、OCP、YCP
Skill:Oracle、Mysql、PostgreSQL、国产数据库
Platform:CSDN、墨天伦、公众号(呆呆的私房菜)
   业务范围:数据库安装部署、日常维护、主备切换、故障处理、性能优化、技术培训等。
需要的伙伴或者贸易合作请移步 公众号【呆呆的私房菜】获取联系方式。
    阅读本文可以了解PostgreSQL数据库的体系架构,包罗内存结构和进程结构,逻辑结构和物理结构。
  

01 内存结构

   暂时缓冲区:用于访问暂时表的本地缓冲区;
work_mem:内部排序操作和hash表在使用暂时磁盘文件之前使用的内存缓冲区;
maintenance_work_mem:在维护性操作(如vacuum、create index和alter table add foreign key等)中使用的内存缓冲区。
  02 进程结构

03 物理结构

  1. ## 查看t1表物理文件存储路径,实际上就是 base/<database oid>/<relation oid>
  2. test=# select pg_relation_filepath('t1');
  3. pg_relation_filepath
  4. ----------------------
  5. base/16384/16413
  6. (1 行记录)
  7. ## 查看数据库oid
  8. test=# select oid, datname from pg_database where datname = 'test';
  9.   oid  | datname
  10. -------+---------
  11. 16384 | test
  12. (1 行记录)
  13. ## 如下是查看t1表的oid和relfilenode
  14. test=# select oid, relfilenode, relname, relkind from pg_class where relname = 't1';
  15.   oid  | relfilenode | relname | relkind
  16. -------+-------------+---------+---------
  17. 16413 |       16413 | t1      | r
  18. (1 行记录)
  19. ## 值得注意的是,relation的oid是唯一的,但是relfilenode是会变化的,例如当执行vacuum full t1的时候,relfilenode就会变化,这跟
复制代码
04 逻辑结构

逻辑存储结构是内部的组织和管理数据的方式。所有的数据库对象都有各自的object identifers,oid是一个无符号的4字节整数,相关对象的oid都存放在相关的体系catalog表中,比如数据库的oid和表的oid分别存放在pg_database和pg_class表中。
**database cluster:**数据库集群簇,它是指向单个PG服务器实例管理的数据库集合,组合数据库集群的这些数据库使用相同的全局配置文件和监听端口,共用进程和内存结构。
一个Database cluster可以包罗多个database、多个user以及databases中的所有对象。
database:在PG中,数据库本身也是数据库对象,并且在逻辑上相互分离,出数据库之外的其他数据库对象(比方表、索引等)都属于它们各自的数据库。
database object:如:表、视图、索引、序列、函数等等。在PostgreSQL中的所有数据库对象都由各自的对象标识符(OID)举行内部的管理。数据库的OID存储在pg_database体系表中,数据库对象的OID存储在pg_class体系表中。
**tablespace:**数据库在逻辑上分为多个存储单元,称为表空间。表空间的作用把逻辑上相关的结构放在一起。数据库逻辑上是一个或多个表空间组成。初始化的时候,会自动创建pg_default和pg_global两个表空间。
**schema:**当创建一个数据库时,会为其创建一个名为public的默认schema。Schema是数据库中的命名空间。在数据库创建的所有对象都是在schema中创建。一个用户可以从同一个客户端毗连中访问差异的schema。而差异的schema中可以有多个同名的table、index、view、sequence、Funcation等数据库对象。
**segment:**一个段是分配给一个逻辑结构(一个表、一个索引或其他对象)的一组区,是数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、暂时段和高速缓存段等。
extent:
区是数据库存储空间分配的一个逻辑单元,它由一连数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,PostgreSQL为该段分配一个新的范围。
**block:**数据块是PostgreSQL 管理数据文件中存储空间的单元,为数据库使用的I/O的最小单元,是最小的逻辑部件。默认值8K。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4