本篇内容主要讲解“PostgreSQL中heap_insert依赖的函数有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中heap_insert依赖的函数有哪些”吧!静态变量
进程中全局共享registered_buffer
对于每一个使用XLogRegisterBuffer注册的每个数据块,填充到registered_buffer结构体中XLogCtlInsert
WAL插入记录时使用的共享数据结构XLogRecData
xloginsert.c中的函数构造一个XLogRecData结构体链用于标识最后的WAL记录registered_buffer/registered_buffers
对于每一个使用XLogRegisterBuffer注册的每个数据块,填充到registered_buffer结构体中heap_insert
主要实现逻辑是插入元组到堆中,其中存在对WAL(XLog)进行处理的部分.
参见PostgreSQL 源码解读(104)- WAL#1(Insert & WAL-heap_insert函数#1)XLogBeginInsert
开始构造WAL记录.
必须在调用XLogRegister*和XLogInsert()函数前调用.XLogRegisterData
添加数据到正在构造的WAL记录中XLogRegisterBuffer
在缓冲区中注册已构建的WAL记录的依赖,在WAL-logged操作更新每一个page时必须调用此函数XLo免费云主机域名gRegisterBufData
在正在构造的WAL记录中添加buffer相关的数据.XLogSetRecordFlags
为即将”到来”的WAL记录设置插入状态标记
XLOG_INCLUDE_ORIGIN 确定复制起点是否应该包含在记录中
XLOG_MARK_UNIMPORTANT 表示记录对于持久性并不重要,这可以避免触发WAL归档和其他后台活动测试脚本如下XLogBeginInsert
启动gdb,设置断点,进入XLogBeginInsert校验,调用XLogInsertAllowed赋值,设置begininsert_called为T,返回XLogRegisterData
进入XLogRegisterData函数执行相关判断,并赋值
rdatas是XLogRecData结构体指针,全局静态变量:
static XLogRecData *rdatas;相关结构体赋值
其中mainrdata_last是mainrdata_head的地址:
static XLogRecData *mainrdata_head;
static XLogRecData *mainrdata_last = (XLogRecData *) &mainrdata_head;完成调用,回到heap_insertXLogRegisterBuffer
进入XLogRegisterBuffer判断block_id,设置max_registered_block_id变量等.
注:max_registered_buffers初始化为5获取buffer的tag
rnode/forkno/block设置flags等其他变量检查该page是否已被其他block_id注册
最后设置in_use为T,返回XLogRegisterBufDataXLogRegisterBufData
进入XLogRegisterBufData函数寻找已注册的缓存结构体在正在构造的WAL记录中添加buffer相关的数据.完成调用,回到heap_insert继续调用XLogRegisterBufData函数注册tuple实际数据XLogSetRecordFlags
为即将”到来”的WAL记录设置插入状态标记逻辑很简单,设置标记位curinsert_flags调用XLogInsert,插入WAL到此,相信大家对“PostgreSQL中heap_insert依赖的函数有哪些”有了更深的了解,不妨来实际操作一番吧!这里是百云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
本篇内容主要讲解“SQLT使用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQLT使用方法是什么”吧!在使用SQLT提供的主要方法之前,须确保SQLT已经被正确 安装,并且使用SQLT的用户被赋予了SQ…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。