由于页面块是文件块在内存中的存在形式,因此在后文中如不进行特殊说明也会使用页面来指代文件块.
表文件的写入(即落般或刷盘)是以什么单位写入的表文件的写入也是以页面块为单位.
PG采用的是行存还是列存PG采用的是传统的行式存储, 即以元组为单位进行数据的存储.
当然, 数据库还有”列存”这样的存储方式, 使用在特定的场合.
元组可以跨页面块(或文件块)存储吗不能.
PG不支持元组的跨块存储,每个元组最大为MaxHeapTupleSize.
元组不可以跨块存储的原因元组不可以跨块存储, 这样保证了文件块中存储的是多个完整的元组.
PG在内存中如何存储磁盘中的文件块的与操作系统一样,PG在内存中开辟了缓冲区域用于存储这些文件块,我们将其在内存中开辟的缓冲区域称为缓冲池,
缓冲池被划分成若干个固定大小(和文件块的尺寸相同,也是BLCKSZ)的缓冲区,
磁盘上的文件块读入内存后被存放在缓冲区中,称之为页面块或缓冲块.
BLCKSZ的默认值是8192(即:8K), 因此一个标准(内存)缓冲块的大小默认为8KB.
存储管理器的主要任务包括哪些 **有6个:
缓冲池管理
Cache机制
虚拟文件描述符管理
空闲空间管理
进程间通信机制(IPC)
大数据存储管理
缓冲池管理干什么用的缓冲池在PG中起缓存的作用.数据库中的事务常常需要频繁地存取数据,为了减少对磁盘的读写,在事务执行时,数据首先将会放入缓冲池中,PG设立了进行间共享的缓冲池(共享缓冲池)以及进程私有的催办(本地缓冲池).
Cache机制有什么用将进程最近使用的一些系统数据缓存在其私有内存中,其级别高于缓冲池.
OS已经有文件描述符,为什么PG还要虚拟的PG通过虚拟文件描述符(Vitual File Descriptor, VFD)来对物理文件进行管理,
这样可以避免因为操作系统对进程打开文件的限制出现错误.
即: FSM, 用于快速定位到表文件中的空闲以便于插入数据,从而提高空间利用率.
PG为什么要实现IPCPG是一个多进程系统,
IPC用来在多个进程后台进程之间进行通信和消息的传递,比如使用消息队列来同步进程产生的无效消息,同时IPC还提供了对共享内存的管理.
PG在大数据存储管理方面提供了大对象和TOAST机制.
大对象机制是一种由用户控制的大数据存储方法,它允许用户调用函数,通过SQL语句直接向表中插入一个大尺寸文件(如:
图片,视频,文档等).
而TOAST机制则是在用户插入的变长数据超过一定限度时自动触发,用户无法对TOAST加以控制.
前者主要用于大尺寸的文件, 后者主要用于变长字符串.
读写元组的过程是怎样的 ***外存管理负责处理数据库与外存介质的交互过程的, 在PG中,
目前只实现了磁盘的管理操作.
其他介质的PG提供了统一的外存操作接口, 需要自己来实现.
3.2.1 表和元组的组织方式 同一个表的元组在表文件中是如何存储的在PG中, 同一个表中的元组按照创建的顺序依次插入到表文件中的.
备注: 在进行清理操作清除被删除的元组后,
元组也可以以无序的方式插入到具有空闲空间的文件块中.
元组之间不进行关联, 这样的表文件称为堆文件.
PG中有哪些堆文件4种:
普通堆
临时堆
序列
TOAST表
元组之间不进行关联, 这样的表文件就叫普通堆文件.
临时堆的结构与普通堆相同,但临时堆仅在会话过程中临时创建,会话结束会自动删除.
序列则是一种元组值自动增长的特殊堆.
TOAST表其实也是一种普通堆,但是它被专门用于存储变长数据.
尽管这几种堆文件功能各异,但在底层的文件结构却是相似的:
每个堆文件都是由多个文件块组成,在物理磁盘中的存储形式如图:
磁盘管理器是SMGR的一种具体实现, 它对外提供了管理磁盘介质的接口,
其主要实现在文件md.c中.磁盘管理器并非对磁盘上的文件直接进行操作,
而是通过VFD机制来进行文件操作.