温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostgreSQL xlog格式之no backup full page

发布时间:2020-06-06 10:18:52 来源:网络 阅读:542 作者:yzs的专栏 栏目:数据库
heap_insert
	xl_heap_insert xlrec;
	xl_heap_header xlhdr;
	XLogRegisterData((char *) &xlrec, SizeOfHeapInsert);->//xl_heap_insert
	|--	XLogRecData *rdata;
	|	rdata->data = data;
	|	rdata->len = len;
	|	mainrdata_last->next = rdata;
	|	mainrdata_last = rdata;
	|--	mainrdata_len += len;
	//xl_heap_header+heapup->t_data
	XLogRegisterBufData(0, (char *) &xlhdr, SizeOfHeapHeader);->
	|--	regbuf = &registered_buffers[block_id];
	|	rdata->data = data;
	|	rdata->len = len;
	|	regbuf->rdata_tail->next = rdata;
	|	regbuf->rdata_tail = rdata;
	|--	regbuf->rdata_len += len;
	XLogRegisterBufData(0,(char *) heaptup->t_data + SizeofHeapTupleHeader,heaptup->t_len - SizeofHeapTupleHeader);
	recptr = XLogInsert(RM_HEAP_ID, info);->
	|--	rdt = XLogRecordAssemble(rmid, info, RedoRecPtr, doPageWrites,&fpw_lsn);
	|--	EndPos = XLogInsertRecord(rdt, fpw_lsn, curinsert_flags);

static XLogRecData hdr_rdt;
XLogRecordAssemble:
	char	   *scratch = hdr_scratch;//hdr_scratch是一个xlog记录的开始位置
	rechdr = (XLogRecord *) scratch;
	scratch += SizeOfXLogRecord;
	hdr_rdt.next = NULL;
	rdt_datas_last = &hdr_rdt;//xlog记录链表头
	hdr_rdt.data = hdr_scratch;
	//hdr_rdt->next=xl_heap_header+heapup->t_data
	registered_buffer *regbuf = &registered_buffers[block_id];
	rdt_datas_last->next = regbuf->rdata_head;
	dt_datas_last = regbuf->rdata_tail;
	//xl_heap_header+heapup->t_data后面紧跟着xl_heap_insert
	rdt_datas_last->next = mainrdata_head;
	rdt_datas_last = mainrdata_last;

PostgreSQL xlog格式之no backup full page

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI