PostgreSQL空闲空间映射表(FSM)
PostgreSQL空闲空间映射表(FSM) 随着数据表中不断插入和删除元组,页内必然会产生空闲空间。当我们需要插入新的元组时,需要优先将元组放到已有页内的空闲空间内,以节约存储空间。如果每次都用新的页来存放新元祖,显然会造成空间利用率的浪费。但我们怎么知道哪个页中有空闲空间、空闲空间的大小是否足够存放新的元组呢?如果没有其他任何技术,则需要遍历页、直到找到足够的空闲空间用于插入新元组,这...
PostgreSQL空闲空间映射表(FSM) 随着数据表中不断插入和删除元组,页内必然会产生空闲空间。当我们需要插入新的元组时,需要优先将元组放到已有页内的空闲空间内,以节约存储空间。如果每次都用新的页来存放新元祖,显然会造成空间利用率的浪费。但我们怎么知道哪个页中有空闲空间、空闲空间的大小是否足够存放新的元组呢?如果没有其他任何技术,则需要遍历页、直到找到足够的空闲空间用于插入新元组,这...
PostgreSQL内存上下文 不管是什么样的数据库系统,存储管理的本质都是一样的:如何减少I/O次数。内存的访问速度至少是磁盘的数十万倍,所以通常读写磁盘所用的时间决定了数据库操作的总时间,而内存的访问时间可以忽略不计。因此,要尽可能的提高I/O命中率,让最可能被使用的文件块停留在内存中。除此之外,内存管理还是整个数据库系统的桥梁,每一个模块都会使用到内存进行函数运行、缓冲、消息传递等,...
PostgreSQL常用命令 generate_series(a, b) [a, b]间所有整数的序列 random() [0, 1)间的随机数 a + random() * (b - a) [a, b)间的随机数 floor(a + random() * (b - a)) [a, b)间的随机整数 chr(int4(random() * 26) + 65) 随机大写字母 chr...
PostgreSQL可见性映射表(VM)和VACUUM操作 PostgreSQL为了实现多版本并发控制(MVCC),当事务删除或者更新元组时,并非从物理上删除,而是将其标记无效,最终再通过VACUUM命令清理这些无效元组,真正的物理删除发生在清理过程。清理无效元组时,需要先找到无效元组,再进行清理。如果没有其他技术,需要遍历查找每一个页,找到页中的无效元组。如果更新和删除不是很频繁,表文件...
PostgreSQL插入大量数据:pg_testgen插件 在进行数据库开发、测试时,新建表之后,时常想自己插入数据,但十分麻烦。 pg_testgen插件可以产生大量随机数据,方便进行数据库开发测试。 插件地址:pg_testgen 安装方法 cd contrib/pg_testgen //进入插件目录 make make install 然后进入数据库、启用插件即可: C...
PostgreSQL插件开发 PostgreSQL中许多控制信息都是以系统表的形式来管理,这个特点决定了PostgreSQL比其他数据库更容易进行内核扩展。PostgreSQL还提供了丰富的数据库内核编程接口,允许开发者以插件的形式将自己的代码融入内核。 PostgreSQL插件开发非常简单,下面举一个例子,开发一个随机测试数据生成器。 插件名为pg_testgen,首先需要创建四个文...
PostgreSQL表和元组的组织方式 上面讲过PostgreSQL的页大小为8K,这意味着堆文件大小最小为8K,且一定为8K的整数倍。对于PostgreSQL,单个堆文件的最大大小限制为1G,超过1G的表会被分成多个堆文件存储。 每一个8K的页面的结构如下图: 这里每一个tuple存储一条数据记录,从数据页底部开始向前依次存储,这些堆元组的地址由一个4B大小的行指针所指向。这些行...
页大小——数据库文件IO的基本单位 除redis等内存数据库外,几乎所有的数据库都是将数据以文件的形式存储在磁盘、SSD硬盘等存储介质里的。目前绝大部分数据库系统的存储介质都是磁盘,磁盘的读写都是以扇区为单位,每一个扇区的大小是512字节,硬件的特点决定了操作系统、数据库系统等程序的最小文件IO单位是512字节。为了文件读写的效率,数据库系统不直接使用512B的最小粒度,而是采用更大的页来...
行存与列存——数据表的存储方式 以下是一个简单的数据表: id name age salary 20220001 Jack 18 4500 20220002 Bob 20 60...
openGauss列存压缩源码分析 在openGauss 3.0.0数据库中,相对于行存以页为单元进行压缩,列存以CU为单元具有天然的压缩优势。 在openGauss中有三种压缩级别:LOW, MIDDLE, HIGH。指定的压缩等级越高,则数据的压缩率越高。除此之外还可以选择不开启压缩。 typedef enum OptCompress { COMPRESS_NO = 0, ...