自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yanzongshuai的专栏

专注于MySQL、MariaDB、Percona、PostgreSQL数据库及Aerospike等nosql数据库

原创 PostgreSQL DDL操作解析

本文介绍PG DDL操作上层接口。1、DDL操作的入口函数是ExecModifyTable,insert、delete、update都会进入这个函数,如果为insert,执行ExecPr...

2020-02-25 19:25:44 479 0

原创 PostgreSQL的insert解析
原力计划

其insert由函数heapam_tuple_insert完成。 1、首先需要从slot中取出tuple值,HeapTupleTableSlot.tuple 2、从relation中得到该记录即将插入表的OID:relation->rd_id,然后slot->tts_table...

2020-02-24 22:11:39 751 0

原创 PostgreSQL如何在页面内找一个free slot

本文介绍向业内插入一条记录时,如何找一个空闲的空间进行插入。PageAddItemExtended1、计算出pd_linp数组的最大值后新增一个后的个数:limit=[pg_lower-...

2020-02-24 20:53:52 277 0

原创 PostgreSQL通过索引获取heap tuple解析

本文介绍通过索引扫描获取heap tuple的TID后,如何通过TID获取heap tuple。一、先介绍两个数据结构关系二、接着介绍获取记录流程1、通过索引扫描后,得到索引记录(key...

2020-02-23 21:23:31 525 0

原创 PostgreSQL表扫描方法解析

本文介绍PG的表扫描方法原理。 全表扫描函数在heap handler API接口函数为heap_getnextslot函数。该函数从磁盘读取数据页到内存并遍历页内记录,将其存储到slot中返回用户。这个函数一次只获取一个记录,倒到上次ExecutePlan函数中循环调用ExecProcNode...

2020-02-21 20:55:17 912 0

原创 表扫描描述符及扫描方向

1、表扫描函数的参数传递通过TableScanDescData,函数内层将扫描到的记录存储到HeapScanDesc.rs_ctup中,然后将该成员内容传递给slot中。2、内部处理时会...

2020-02-21 11:53:32 248 0

原创 PostgreSQL的heapgetpage函数解析

本文介绍heapgetpage函数的流程,这个函数的功能是从磁盘中读取一个页到内存,并将可见的记录的记录号,即第几个记录,保存到扫描描述符的rs_vistuples数组中。1、heapg...

2020-02-20 22:14:41 403 0

原创 PostgreSQL TID及tuple slot

1)postgresql默认存储的是堆表,数据按行存储在heap page中。行记录除了存储字段的值外还会存储对应的ctid即行号,表示在哪个页第几个记录。2)进行select的时候也可...

2020-02-19 21:36:23 457 0

原创 非易失性WAL buffer实现解析(六)

本文接上文接着介绍PreallocNonVolatileXlogBuffer的实现。1)需要将NVM WAL BUFFER初始化LSN到ControlFile->discarded...

2020-02-16 16:38:30 278 0

原创 非易失性WAL buffer实现解析(五)

本文接着介绍非易失性WAL buffer对StartupXLOG流程的改造。1)StartupXLO流程中,当WAL日志回放完退出回放循环后,对其进行改造2)ControlFile-&g...

2020-02-15 22:02:28 281 0

原创 PostgreSQL 13将支持在psql中显示事务状态

PostgreSQL13版本中的psql将可以显示当前连接中一个事务是否阻塞。添加%x到默认的宏定义PROMPT1和PROMPT2中。可以通过%d跟踪当前连接是否阻塞,添加默认值不需...

2020-02-13 14:28:42 339 0

原创 非易失性WAL buffer实现解析(四)

本文接着介绍checkpoint对WAL BUFFER的改造。改造函数CreateCheckPoint函数。1)checkpoint刷完脏页(会先将脏页的WAL刷入介质),并将check...

2020-02-10 17:01:41 299 0

原创 非易失性WAL buffer实现解析(三)

本文接上文介绍函数WaitForWALToBecomeAvailable打开WAL日志文件并切换日志源的实现。该函数不涉及关于NVMWAL BUFFER的修改。1)主机重启恢复时:日志...

2020-02-08 22:06:32 255 0

原创 非易失性WAL buffer实现解析(二)

本文接着介绍WAL写和读的改造。1、XLogInsert函数改造:将日志写入NVM,此时不确定CPU CACHE何时刷以及顺序当日志量距离上次checkpoint产生的WAL文件个数(...

2020-02-07 20:55:03 254 0

原创 非易失性WAL buffer实现解析(一)

前文简要介绍了非易失性WAL buffer的PostgreSQL email,本文开始主要介绍其实现机制。 non-volatile WAL buffer同样是结合inte...

2020-02-06 20:02:10 629 0

原创 CheckPoint刷写脏页

1、CreateCheckPoint调用函数CheckPointGuts将共享内存中所有的脏页刷到磁盘。脏页除表和索引页外还包括XACT、pg_commit_ts、pg_subtrans...

2020-02-05 05:00:00 691 0

原创 CREATE TABLE ... WITH storage_parameter [= value] [, ... ]

创建表时,可以通过WITH子句指定storage_parameter,这个存储参数指什么?在代码中如何实现? 1、storage_parameter参数说明参考:https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CR...

2020-02-04 00:00:00 393 0

原创 PG11新特性解读:新增非空默认值字段不需要重写表-原理

本文对原理进行解读

2020-02-03 15:30:26 398 0

原创 PG11新特性解读:新增非空默认值字段不需要重写表

PG11新特性解读:新增非空默认值字段不需要重写表1、如何理解这个特性在postgresql11之前,为表增加一个包含非空默认值的字段,将会导致表重写,为每一行添加该字段,并填充默认值。...

2020-02-02 16:58:01 682 0

提示
确定要删除当前文章?
取消 删除