4.4 SQL操作对页面的影响
4.4.1DML操作对于页面存储格式的影响
页面从一个新的状态,到放入数据,数据经过DML操作,页面的数据发生变化,在结果vacuum清理数据后,页面数据又变为一个整齐状态。如下从四个角度来说DML操作对于数据页面的影响。
一 空页面
一个页面大小为8k,其中,页头占一小部分,特殊块从页尾的位置占一小部分,其余大部分空间,为数据占用。在上图中,“页数据”标识的位置处,都是用于存储数据的。
二 数据插入后页面的状态
如果是往一个表上插入数据,其插入方式,如上图,从页尾开始存放第一条记录,然后是第二条、直至本页空间不够。
如果是不同的表,PG的处理方式,是不同表由不同文件组成,不同文件的块(8k)映射不同的buf,则往不同的表上插入数据的时候,对应的页一定不同。
三 数据删除后页面的状态
元组(tuple)的删除,则更为简单,对于页面来讲,当找到tuple所在的页,直接为tuple的一个“信息位”(cmax)置新的值即可。这说明,PG删除元组的操作,不是真正从页面上把元组去掉,也不是如Oracle,把旧信息置于回滚段,而是直接在元组头上标识一个“删除标志”。此标志,是一个数值型的一个值,表示一个被删除的元组是否被其他“事务”(活动着的连接)看到。[1]
以上描述,可以通过查看heap_delete函数的如下调用了解:
HeapTupleHeaderAdjustCmax(tp.t_data, &cid,&iscombo);
四 数据更新后页面的状态
元组更新,是删除操作和插入操作的组合。这点,可以从heap_update函数代码得知。
五 扩展知识
以上四条,是用户表、用户数据在内存(数据页)中的数据增删改和初始新页面时的状态,系统表和系统表的数据,也是以tuple格式存放的,一样的存储方式。
本节没有就索引页面的存储格式展开讨论。
如下是相关函数的一部分调用关系:
PageHasFreeLinePointers
PageAddItem
RelationPutHeapTuple
heap_insert
CopyFrom
intorel_receive
simple_heap_insert
ExecInsert
ATRewriteTable
toast_save_datum
heap_update
PageGetHeapFreeSpace
[1] PG的MVCC技术,其中,涉及存储层的,有个名词叫做“元组可见性”,是原来表明哪些事务可以读到某个元组、哪些事务不能读到某个元组。
“元组可见性”可以通过HeapTupleSatisfiesVisibility、HeapTupleSatisfiesUpdate等调用关系追踪。
分享到:
相关推荐
用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们。PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制。 它是开源的,其源代码是...
2. 与PostgreSQl配合的开源软件很多,有很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,很容易做读写分离、负载均衡、数据水平拆分等方案,而这在MySQL下则比较困难。 3. PostgreSQL源代码写的很...
postgresql数据库,用来存储数据,关系型数据库
postgresql-10.10-2-linux-x64-binaries.tar.gz 安装包 PostgreSQL经历了长时间的演变。该项目最初开始于在加利福尼亚大学伯克利分校的Ingres计划。这个计划的领导者迈克尔·斯通布雷克在1982年离开加利福尼亚...
PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的,虽然并发不高时,MySQL处理速度快,但当并发高的时候,对于现在多核的单台机器上,MySQL...
摘要:为了提高汽车客运站管理工作效率,减少调度员工作量,及时准确地安排好...同时有每一个模块的数据流图,分E-R图,总E-R图,数据流图,数据流程图。要求高的还包括存储模式设计,游标设计,触发器,sql文件等等。
PostgreSQL 是一个高度安全稳定的开源数据库系统,一般来说,如果你需要在关键领域做数据存储,在不考虑商业数据库软件的情况下,我们建议你优先考虑使用 PostgreSQL 数据库,而在一些对于数据安全与稳定要求不是...
用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们。PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制。 它是开源的,其源代码是...
摘要GPUDirectRDMA允许直接从PCIe设备到GPURAM的对等数据加载。对于Linux内核和PostgreSQL的扩展模块,我们通过将NVMe-SSD
PostgreSQL存储二进制数据.htm
用于安全地存储数据; 支持最佳做法,并允许在处理请求时检索它们。 PostgreSQL(也称为Post-gress-Q-L)由PostgreSQL全球开发集团(全球志愿者团队)开发。 它不受任何公司或其他私人实体控制。 它是开源的,其源代码是...
PostgreSQL Prometheus适配器 ... 传入的数据由一个或多个线程处理,并且一个或多个写入器线程将按每日或每小时分区将数据存储在PostgreSQL中。 适配器将根据传入数据的时间戳自动创建分区。 PostgreSQL P
learn-postgresql, 了解如何使用PostgreSQL存储关系数据 学习 PostgreSQL了解如何使用PostgreSQL存储关系数据安装在开始使用PostgreSQL之前,你必须先安装它。 按照以下步骤开始: macOS有两种安装PostgreSQL的方法...
PostGreSql 它由两个模块组成,一个需要 Oracle 数据库(最少 9 个)的管理模块“Panda-Adm”和一个可以与 Oracle、Mysql、MsSql 数据库一起用于数据的请求模块“Panda-Qry”。 “Panda-Adm”,管理模块,完全像 BO...
用于PostgreSQLMongoDB外部数据包装器该MongoDB扩展实现了PostgreSQL外部数据包装器。 请注意,此版本的mongo_fdw可与PostgreSQL和EDB Postgres Advanced Server 9.3、9.4和用于PostgreSQLMongoDB外部数据包装器一起...
该扩展使用了 Optimized Row Columnar (ORC) 格式的数据存储布局。ORC 提升 Facebook 开发的 RCFile 格式,带来如下好处: 压缩: Reduces in-memory and on-disk data size by 2-4x. Can be extended to support ...
城市爬行 刮除圣路易斯市提供的开放数据源。 将数据加载到Postgresql数据存储中。 开发设置 克隆项目 vagrant up ./cityscrape-setup.sh 部署方式 Docker(还没有...)
王青松-飞象数据-实现PostgreSQL逻辑复制实战.pdf 德哥-阿里云 - PostgreSQL开发最佳实践.pdf 王硕-瀚高软件-PostgreSQL WAL日志解析与应用.pdf 德哥-阿里云-PostgreSQL前世今生.pdf 叶金荣-知数堂-...
PostGreSql它由两个模块组成,一个管理模块“ Panda-Adm”需要一个Oracle数据库(最少9个),一个请求者模块“ Panda-Qry”可以与Oracle,Mysql和MsSql数据库一起使用。 管理模块“ Panda-Adm”以BO的形式完全管理...
确保已创建数据库并且存在具有以下结构的表(将table_name替换为数据存储将使用的表的名称-默认情况下为blocks ): CREATE TABLE IF NOT EXISTS table_name (key TEXT NOT NULL UNIQUE, data BYTEA ) 建议在表上...