PG的逻辑结构和内存结构

PG的逻辑结构和内存结构

PostgreSQL体系结构-物理结构

物理结构
数据库集簇布局
数据库布局
表和索引文件的相关布局
表空间的布局
堆表文件的内部结构
对于数据的访问(堆元组的读写)

PG对比ORACLE的逻辑结构

逻辑结构
一个数据库实例对应多个数据库( PostgreSQL MySQL SQLServer)
一个数据库实例对应一个数据库( Oracle)
多个数据库实例对应—个数据库( ORACLE RAC)

一个PostgreSQL数据库服务下可以有多个数据库,多个数据库之间无法互相访问,需要访问需要使用dblink等手段。
ORACLE数据库一个实例只能有属于一个数据库,一个库可以有多个实例,比如RAC就是如此。Post的这种其实和sql server, MYSQL都类似。

Database,instance

PostgresqlORACLESQL Server
一个库不能属于多个实例一个库可以有多个实例
一个实例下有多个库一个实例只能属于一个库

Schema
在PostgreSQL中Schema可以理解为一个命名空间或目录,每个schema有各自的表,视图等对象,不同的schema下名称可以相同。ORACLE的Schema功能上和PostgreSQL相同,但是ORACLE一个用户即一个Schema。

PG的逻辑结构:

Database数据库:Postgres 默认数据库、Template0 最精简模板、Template1 默认模板;一个数据库可以有多个User用户,多个Schema模式。默认创建一个数据库会存储在默认表空间,它包含一个Public名称的Schema模式(拷贝自Template1模板)。
Tablespace表空间:表空间是物理结构,同一表空间下可以有多个数据库。pg_default表空间是默认创建存放用户数据;pg_global表空间是默认创建存放系统数据;
User用户:postgres用户是默认创建的超级管理员;每个数据库都有一个OWNER用户,每个用户可以OWNER多个数据库。
Schema模式:数据库创建后,默认会有一个Public名称的Schema模式。它可隔离多个用户之间相同名称的对象。一个数据库可以有多个Schema模式,他们互不相关互相隔离

在这里插入图片描述
在这里插入图片描述

Database cluster: 由postgresql server管理的数据库的集合,下面由多个database组成

databsase: 由各种独立的数据库对象构成,比如下图中的table,indexes, view,function,sequence

数据最终存储在表中

表如何存储数据
表的组成表由多个 page [ block]组成)
一个page包含(页头信息空闲空间 Tuple)

整体来讲

Tablespace
Database cluster
multi database
表索引序列视图函数用户模式

Tablespace是数据最大的存储空间
Database是构成表空间的存储单元
pages是 PostgreSQL数据库中最小的O单元

所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。

Oracle的逻辑结构

img

在这里插入图片描述

PG的内存结构

Oracle的内存结构

在这里插入图片描述

PG的内存结构

在这里插入图片描述

在这里插入图片描述
在Postgresql中,内存大概被分为两块

Local memory area – 为每一个backend process 分配的内存

Shared memory area – PostgreSQL server 所有的backgroud process使用的内存

2.1 Local memory area

每一个backend process 都会分配一块local memory area, 每一块区域又分为三个子区域 ,见下表

sub-areadescriptionreference
work_mem用户在sort,distinct,merge join,hash join的时候会用到这块区域Chapter 3
maintenance_work_memvacuum,reindex会用到这块区域Section 6.1
temp_buffers存储临时表会用到这块区域

2.2 Shared memory area

这块区域在服务器启动的时候分配,这块区域也是分为好几个子区域,见下面介绍

sub-areadescriptionreference
shared buffer pool将表或者索引的page从磁盘加载到shared buffer,然后在shared buffer操作Chapter 8
WAL buffer在服务端出现问题的时候,确保数据不会丢失,在写到磁盘之前,wal buffer是wal log的缓存区域Chapter 9
commit log为了并发控制所有事物的状态的保持而分配的区域

另外,Postgresql还分配一些其他的内存区域:

  • 为访问控制分配的子区域,比如轻量级锁,共享或者专有锁.
  • 为其他backgroud process提供的子区域,比如检查点,vacuum.
  • 为事物处理提供的子区域,比如事物中的保存点,和二阶段事物提交.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值