热头条丨PostgreSQL的clog属于日志还是数据,需要遵守write-WAL-before-data吗?


(资料图)

总结

从原理上来看,MVCC需要给定事务ID后,能查询到事务的状态。

在PG中事务状态可以从几个路径获取:

在快照中查询(活跃事务)在元组头的状态为查询(不活跃事务)在CLOG中查询(不活跃事务)

如果不看实现只看概念,不活跃事务提交状态也可以在XLOG中查询,CLOG可以视作一种XLOG commit/rollback日志的缓存、映射,一种事务提交状态的快速查询方式。

所以在write-WAL-before-data中,CLOG也会按照data来处理,只有XLOG属于WAL。

Postgresql中clog写盘实现SlruPhysicalWritePage

postgresql中clog使用SLRU机制读写,在Slru写盘前,会有保证xlog先写的机制:

group_lsn表示32个事务一组中最大的日志序列号(LSN)。group_lsn主要用于事务提交非同步落盘的场景。
static boolSlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruWriteAll fdata){...if (shared->group_lsn != NULL){/* * We must determine the largest async-commit LSN for the page. This * is a bit tedious, but since this entire function is a slow path * anyway, it seems better to do this here than to maintain a per-page * LSN variable (which"d need an extra comparison in the * transaction-commit path). */XLogRecPtrmax_lsn;intlsnindex,lsnoff;lsnindex = slotno * shared->lsn_groups_per_page;max_lsn = shared->group_lsn[lsnindex++];for (lsnoff = 1; lsnoff < shared->lsn_groups_per_page; lsnoff++){XLogRecPtrthis_lsn = shared->group_lsn[lsnindex++];if (max_lsn < this_lsn)max_lsn = this_lsn;    <<<<<<<<<<<<<<<<<<<<<<<<< 找到最大的LSN}if (!XLogRecPtrIsInvalid(max_lsn)){/* * As noted above, elog(ERROR) is not acceptable here, so if * XLogFlush were to fail, we must PANIC.  This isn"t much of a * restriction because XLogFlush is just about all critical * section anyway, but let"s make sure. */START_CRIT_SECTION();XLogFlush(max_lsn);      <<<<<<<<<<<<<<<<<<<<<<<<< 先保证XLOG写到这个位点!END_CRIT_SECTION();}}  ...  if (pg_pwrite(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ)  {    ...  }}

Postgresql中用户数据写盘实现FlushBuffer

数据页面同理,也是先找到页面lsn,刷xlog,在写数据。

static voidFlushBuffer(BufferDesc *buf, SMgrRelation reln){...buf_state = LockBufHdr(buf);/* * Run PageGetLSN while holding header lock, since we don"t have the * buffer locked exclusively in all cases. */recptr = BufferGetLSN(buf);   <<<<<<<<<<<<<<<<<<<<<<<<< 找到页面的LSN/* To check if block content changes while flushing. - vadim 01/17/97 */buf_state &= ~BM_JUST_DIRTIED;UnlockBufHdr(buf, buf_state);/* * Force XLOG flush up to buffer"s LSN.  This implements the basic WAL * rule that log updates must hit disk before any of the data-file changes * they describe do. * * However, this rule does not apply to unlogged relations, which will be * lost after a crash anyway.  Most unlogged relation pages do not bear * LSNs since we never emit WAL records for them, and therefore flushing * up through the buffer LSN would be useless, but harmless.  However, * GiST indexes use LSNs internally to track page-splits, and therefore * unlogged GiST pages bear "fake" LSNs generated by * GetFakeLSNForUnloggedRel.  It is unlikely but possible that the fake * LSN counter could advance past the WAL insertion point; and if it did * happen, attempting to flush WAL through that location would fail, with * disastrous system-wide consequences.  To make sure that can"t happen, * skip the flush if the buffer isn"t permanent. */if (buf_state & BM_PERMANENT)XLogFlush(recptr);         <<<<<<<<<<<<<<<<<<<<<<<<< 先保证XLOG写到这个位点!    ...smgrwrite(reln,  BufTagGetForkNum(&buf->tag),  buf->tag.blockNum,  bufToWrite,  false);  ...}

关键词: PostgreSQL

热头条丨PostgreSQL的clog属于日志还是数据,需要遵守write-WAL-before-data吗?

如果不看实现只看概念,不活跃事务提交状态也可以在XLOG中查询,CLOG可以视作一种XLOGcommit rollback日志的缓存、映射,一种事务提交状态的

腾讯云 2023-03-05

【世界聚看点】软件工程就业前景

1、Web开发,Web开发包括前端开发和后端开发两大岗位,前端开发主要职责是利用HTML、XHTML、CSS、JavaScript、Flash等各种Web前端技

万年历 2023-03-04

天天热点评!因染粉色头发被网暴的女孩走了,她曾努力自救

24岁的杭州女孩郑灵华,是浙江师范大学2022届本科毕业生,2022年7月,她曾因粉色头发而遭遇大规模网暴。2023年2月19日晚,一则令人心碎的消息

女法官 2023-03-04

今日看点:河北省会考时间2020

2020河北省会考时间是7月16日-18日。高中会考即普通高中学业水平考试,是根据国家普通高中课程标准和教育考试规定,由省级教育行政部门组织实

万年历 2023-03-04

香港上映首日,《毒舌律师》保持领先

随着《满江红》的正式上映差距逐渐拉开,上映首日便以接近20W的票房,“击碎”了《流浪2》在总票房上超越的可能性。

网易娱乐 2023-03-04

执竿入城文言文翻译阅读答案 执竿入城文言文翻译 新资讯

1、之,这里应该是指的竹竿;亦,是也的意思;非,意思是不是;逐,单字比较难说,整个句子的意思是说,于是,就听了他的话

互联网 2023-03-04

世界观天下!东方财富证券:给予宇瞳光学增持评级

东方财富证券股份有限公司邹杰近期对宇瞳光学进行研究并发布了研究报告《动态点评:全面布局智能驾驶感知系统,打开全新成长空间》,本报告对

证券之星 2023-03-04

热头条丨PostgreSQL的clog属于日志还是数据,需要遵守write-WAL-before-data吗?

如果不看实现只看概念,不活跃事务提交状态也可以在XLOG中查询,CLOG可以视作一种XLOGcommit rollback日志的缓存、映射,一种事务提交状态的

腾讯云 2023-03-05

【世界聚看点】软件工程就业前景

1、Web开发,Web开发包括前端开发和后端开发两大岗位,前端开发主要职责是利用HTML、XHTML、CSS、JavaScript、Flash等各种Web前端技

万年历 2023-03-04

天天热点评!因染粉色头发被网暴的女孩走了,她曾努力自救

24岁的杭州女孩郑灵华,是浙江师范大学2022届本科毕业生,2022年7月,她曾因粉色头发而遭遇大规模网暴。2023年2月19日晚,一则令人心碎的消息

女法官 2023-03-04

今日看点:河北省会考时间2020

2020河北省会考时间是7月16日-18日。高中会考即普通高中学业水平考试,是根据国家普通高中课程标准和教育考试规定,由省级教育行政部门组织实

万年历 2023-03-04

香港上映首日,《毒舌律师》保持领先

随着《满江红》的正式上映差距逐渐拉开,上映首日便以接近20W的票房,“击碎”了《流浪2》在总票房上超越的可能性。

网易娱乐 2023-03-04

执竿入城文言文翻译阅读答案 执竿入城文言文翻译 新资讯

1、之,这里应该是指的竹竿;亦,是也的意思;非,意思是不是;逐,单字比较难说,整个句子的意思是说,于是,就听了他的话

互联网 2023-03-04

世界观天下!东方财富证券:给予宇瞳光学增持评级

东方财富证券股份有限公司邹杰近期对宇瞳光学进行研究并发布了研究报告《动态点评:全面布局智能驾驶感知系统,打开全新成长空间》,本报告对

证券之星 2023-03-04
x 广告
x 广告
x 广告

Copyright   2015-2022 华南仓储网版权所有  备案号:粤ICP备18025786号-52   联系邮箱: 954 29 18 82 @qq.com