- 博客(19)
- 问答 (1)
- 收藏
- 关注
原创 PostgreSQL DDL操作解析
本文介绍PG DDL操作上层接口。1、DDL操作的入口函数是ExecModifyTable,insert、delete、update都会进入这个函数,如果为insert,执行ExecPr...
2020-02-25 19:25:44 2072
原创 PostgreSQL的insert解析
其insert由函数heapam_tuple_insert完成。1、首先需要从slot中取出tuple值,HeapTupleTableSlot.tuple2、从relation中得到该记录即将插入表的OID:relation->rd_id,然后slot->tts_tableOid和tuple->t_tableOid更新为该OID3、调用heap_insert将tu...
2020-02-24 22:11:39 2103
原创 PostgreSQL如何在页面内找一个free slot
本文介绍向业内插入一条记录时,如何找一个空闲的空间进行插入。PageAddItemExtended1、计算出pd_linp数组的最大值后新增一个后的个数:limit=[pg_lower-...
2020-02-24 20:53:52 722
原创 PostgreSQL通过索引获取heap tuple解析
本文介绍通过索引扫描获取heap tuple的TID后,如何通过TID获取heap tuple。一、先介绍两个数据结构关系二、接着介绍获取记录流程1、通过索引扫描后,得到索引记录(key...
2020-02-23 21:23:31 1220
原创 PostgreSQL表扫描方法解析
本文介绍PG的表扫描方法原理。全表扫描函数在heap handler API接口函数为heap_getnextslot函数。该函数从磁盘读取数据页到内存并遍历页内记录,将其存储到slot中返回用户。这个函数一次只获取一个记录,倒到上次ExecutePlan函数中循环调用ExecProcNode再次进入该函数获取下一个记录,依次类推,直到获得所有记录。...
2020-02-21 20:55:17 2175
原创 表扫描描述符及扫描方向
1、表扫描函数的参数传递通过TableScanDescData,函数内层将扫描到的记录存储到HeapScanDesc.rs_ctup中,然后将该成员内容传递给slot中。2、内部处理时会...
2020-02-21 11:53:32 647
原创 PostgreSQL的heapgetpage函数解析
本文介绍heapgetpage函数的流程,这个函数的功能是从磁盘中读取一个页到内存,并将可见的记录的记录号,即第几个记录,保存到扫描描述符的rs_vistuples数组中。1、heapg...
2020-02-20 22:14:41 746
原创 PostgreSQL TID及tuple slot
1)postgresql默认存储的是堆表,数据按行存储在heap page中。行记录除了存储字段的值外还会存储对应的ctid即行号,表示在哪个页第几个记录。2)进行select的时候也可...
2020-02-19 21:36:23 1087
原创 非易失性WAL buffer实现解析(六)
本文接上文接着介绍PreallocNonVolatileXlogBuffer的实现。1)需要将NVM WAL BUFFER初始化LSN到ControlFile->discarded...
2020-02-16 16:38:30 504
原创 非易失性WAL buffer实现解析(五)
本文接着介绍非易失性WAL buffer对StartupXLOG流程的改造。1)StartupXLO流程中,当WAL日志回放完退出回放循环后,对其进行改造2)ControlFile-&g...
2020-02-15 22:02:28 495
原创 PostgreSQL 13将支持在psql中显示事务状态
PostgreSQL13版本中的psql将可以显示当前连接中一个事务是否阻塞。添加%x到默认的宏定义PROMPT1和PROMPT2中。可以通过%d跟踪当前连接是否阻塞,添加默认值不需...
2020-02-13 14:28:42 735
原创 非易失性WAL buffer实现解析(四)
本文接着介绍checkpoint对WAL BUFFER的改造。改造函数CreateCheckPoint函数。1)checkpoint刷完脏页(会先将脏页的WAL刷入介质),并将check...
2020-02-10 17:01:41 498
原创 非易失性WAL buffer实现解析(三)
本文接上文介绍函数WaitForWALToBecomeAvailable打开WAL日志文件并切换日志源的实现。该函数不涉及关于NVMWAL BUFFER的修改。1)主机重启恢复时:日志...
2020-02-08 22:06:32 508
原创 非易失性WAL buffer实现解析(二)
本文接着介绍WAL写和读的改造。1、XLogInsert函数改造:将日志写入NVM,此时不确定CPU CACHE何时刷以及顺序当日志量距离上次checkpoint产生的WAL文件个数(...
2020-02-07 20:55:03 501
原创 非易失性WAL buffer实现解析(一)
前文简要介绍了非易失性WAL buffer的PostgreSQL email,本文开始主要介绍其实现机制。 non-volatile WAL buffer同样是结合inte...
2020-02-06 20:02:10 1115
原创 CheckPoint刷写脏页
1、CreateCheckPoint调用函数CheckPointGuts将共享内存中所有的脏页刷到磁盘。脏页除表和索引页外还包括XACT、pg_commit_ts、pg_subtrans...
2020-02-05 05:00:00 1168
原创 CREATE TABLE ... WITH storage_parameter [= value] [, ... ]
创建表时,可以通过WITH子句指定storage_parameter,这个存储参数指什么?在代码中如何实现?1、storage_parameter参数说明参考:https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-STORAGE-PARAMETERS2、代码中如何实现?在Relatio...
2020-02-04 00:00:00 1368
原创 PG11新特性解读:新增非空默认值字段不需要重写表
PG11新特性解读:新增非空默认值字段不需要重写表1、如何理解这个特性在postgresql11之前,为表增加一个包含非空默认值的字段,将会导致表重写,为每一行添加该字段,并填充默认值。...
2020-02-02 16:58:01 1714
空空如也
innodb插入意向锁如何使用
2015-06-07
TA创建的收藏夹 TA关注的收藏夹
TA关注的人