目录
一、逻辑结构
一个数据库实例对应多个数据库(Postgresql Mysql Sqlserver)
一个数据库实例对应一个数据库(oracle)
一个数据库实例对应多个数据库(oracle rac)
1. 数据库集簇(Database Clusterr)
换句话说,两个或多个数据库的集合,共同由Postgresql服务器管理,组成数据库集簇的这些数据库使用相同的全局配置文件和监听端口、共用进程和内存结构。
一个数据库当中有自己独立的一组对象(表 索引 视图 函数 用户 模式 序列)
多个数据库之间无法直接访问,可通过例如dblink,数据库之间是隔离的状态
2. 数据库集簇逻辑结构
Tablespace
Database Cluster
multi database
表 索引 序列 视图 函数 用户 模式
pages
注意:在postgresql中,数据库不能跨表空间存在
Tablespace 是数据库最大的存储空间
Database 是构成表空间的存储单元
pages 是Postgresql数据库中最小的I/O单元
表空间就是数据库集簇的大小
数据库逻辑结构图
二、内存结构
1. 本地内存
本地内存区域Local Memory Area(Oracle私有全局区)
由每个后端服务进程分配以供自己使用
(1)本地内存区域的作用
后端进程分配本地内存区域用作查询处理
(2)本地内存区域的组成
- work_mem
查询处理过程中执行Order by、Distinct对元组进行排序使用这部分内存
多表连接查询使用这部分内存
- temp_buffers
临时表相关操作使用这部分内存
- maintenance_work_mem
维护操作(VACUUM、REINDEX、 CREATE INDEX等)使用这部分内存
postgres=# show work_mem;
work_mem
----------
4MB
(1 row)
postgres=# show maintenance_work_mem;
maintenance_work_mem
----------------------
64MB
(1 row)
postgres=# show temp_buffers;
temp_buffers
--------------
16MB
(1 row)
2. 共享内存
共享内存区域Share Memory Area(Oracle SGA)
在Postgresql服务器启动时分配,由所有后端进程共同使用,内存的大小会根据配置文件分配
(1)共享内存区域的作用
效率高,进程可以直接读写内存,而不需要任何数据的拷贝
(2)共享内存区域的组成
- shared buffer pool
将表和索引中的页面从持久存储装载到这里,并直接操作它们
- WAL buffer
WAL文件持久化之前的缓冲区
- CommitLog buffer
Postgresql在Commit Log中保存事务的状态,并将这些状态保留在共享内存缓冲区中,在整个事务处理过程中使用
数据库内存结构图