数据库杂谈

PostgreSQL可见性映射表(VM)和VACUUM操作

PostgreSQL可见性映射表(VM)和VACUUM操作 PostgreSQL为了实现多版本并发控制(MVCC),当事务删除或者更新元组时,并非从物理上删除,而是将其标记无效,最终再通过VACUUM命令清理这些无效元组,真正的物理删除发生在清理过程。清理无效元组时,需要先找到无效元组,再进行清理。如果没有其他技术,需要遍历查找每一个页,找到页中的无效元组。如果更新和删除不是很频繁,表文件...

PostgreSQL插件开发

PostgreSQL插件开发 PostgreSQL中许多控制信息都是以系统表的形式来管理,这个特点决定了PostgreSQL比其他数据库更容易进行内核扩展。PostgreSQL还提供了丰富的数据库内核编程接口,允许开发者以插件的形式将自己的代码融入内核。 PostgreSQL插件开发非常简单,下面举一个例子,开发一个随机测试数据生成器。 插件名为pg_testgen,首先需要创建四个文...

PostgreSQL表和元组的组织方式

PostgreSQL表和元组的组织方式 上面讲过PostgreSQL的页大小为8K,这意味着堆文件大小最小为8K,且一定为8K的整数倍。对于PostgreSQL,单个堆文件的最大大小限制为1G,超过1G的表会被分成多个堆文件存储。 每一个8K的页面的结构如下图: 这里每一个tuple存储一条数据记录,从数据页底部开始向前依次存储,这些堆元组的地址由一个4B大小的行指针所指向。这些行...

页大小——数据库文件IO的基本单位

页大小——数据库文件IO的基本单位 除redis等内存数据库外,几乎所有的数据库都是将数据以文件的形式存储在磁盘、SSD硬盘等存储介质里的。目前绝大部分数据库系统的存储介质都是磁盘,磁盘的读写都是以扇区为单位,每一个扇区的大小是512字节,硬件的特点决定了操作系统、数据库系统等程序的最小文件IO单位是512字节。为了文件读写的效率,数据库系统不直接使用512B的最小粒度,而是采用更大的页来...