(资料图片仅供参考)
总结
从原理上来看,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属于日志还是
- 即时看!东方明珠塔多高多少层电梯_东方
- 每日热闻!北京通州区政府与理实国际签署
- 世界快资讯丨保护乌江生态环境!沿河、德
- 微动态丨法治护航,助民营经济行稳致远
- 环球微头条丨2-氰基-3-氟-4-溴苯胺
- 世界热头条丨霹雳的拼音和解释_霹雳的拼音
- 【速看料】阿玛尼是哪个国家的品牌_百魅
- 【全球独家】轮胎行业逐步回暖 产业链企
- 天天关注:小针刀治疗颈椎病效果怎么样_
- 天天快讯:u盘启动盘制作工具_win10系统u
- 世界速读:看好中国!德银上调中国经济增
- 【环球播资讯】2月豆粕市场回顾及3月展望
- 每日快报!东莞桥牌网 bbo_东莞桥牌网
- 天天快看:赵民革任首钢集团有限公司党委
- 当前通讯!产学研共议数实融合趋势,钉钉
- 观速讯丨changeful
- 全球看热讯:贝泰妮:融资净偿还2481.7万
- 每日观点:酷我音乐携手三联韬奋书店共推
- 【世界播资讯】墨西哥宣布特斯拉将在当地
- 环球热点评!faro
- 环球热资讯!盖聂被谁杀死的_盖聂死了吗
- 全球热头条丨“火出圈”的围炉煮茶安全隐
- 焦点!L-90TP型飞机
- 环球快资讯:2.4g网和5g网_2 4g网络和5g
- 当前头条:创新高!江西80个县区接收天然
- 环球新资讯:头发很毛躁怎么变柔顺_头发
- 今日热讯:我的美少年将军丁墨全文免费阅
- 环球视点!白羽肉鸡行业深度报告:看好一
- 全球关注:血型是o型rh阴性血_rh阴性血是
- 天天最新:男性肝郁脾虚的症状_肝郁脾虚
- 每日看点!2022年成都主要商业体销售额排
- 环球快看:颐和园开门时间_颐和园开放时间
- 天天动态:展组词_汉字展组词
- 世界快报:帕玛森干酪的吃法_干酪的吃法
- 讯息:“信托一哥”股权变更,100%股权划
- 焦点精选!泰伦-卢:威少今天打得不错
- 环球快看:山东英才学院_山东英才学院贴吧
- 当前热文:万亩李花,花开似雪
- 信息:变更到站怎么操作都能成功吗_变更
- 环球短讯!我国地下基础设施监测技术获新
- 快看:上元戏呈贡父
- 最新消息:吃氨基酸什么牌子好_踩aj是什
- 【世界速看料】2022年安徽规模以上工业利
- 环球速讯:还剩2天!还未缴费的城乡居民
- 世界快看点丨香山瘦身
- 焦点短讯!亚马逊怎么联系客服_亚马逊怎
- 世界热讯:titan x pascal显卡_titan x
- 每日热门:水冷螺杆式冷水机组
- 要闻速递:“小修小补”便利店 居民生活
- 天天视点!梦的化石
- 全球快讯:董斌
- 世界看点:沪电股份:应用于4D车载雷达等
- 百事通!14集团军
- 热讯:CIMCAI world leading port ai
- 焦点快报!蔡徐坤在米兰时装被针对,外媒
- 【世界新视野】中国农村留守人口
- 全球观焦点:西安有什么好玩的_这几个地
- 世界观察:南京鼓楼区一鲜花店老板被约谈
- 播报:助力乡村人才振兴!国内首家“乡村
- 环球热点评!faro
- 环球热资讯!盖聂被谁杀死的_盖聂死了吗
- 全球热头条丨“火出圈”的围炉煮茶安全隐
- 焦点!L-90TP型飞机
- 环球快资讯:2.4g网和5g网_2 4g网络和5g
- 当前头条:创新高!江西80个县区接收天然
- 环球新资讯:头发很毛躁怎么变柔顺_头发
- 今日热讯:我的美少年将军丁墨全文免费阅
- 环球视点!白羽肉鸡行业深度报告:看好一
- 全球关注:血型是o型rh阴性血_rh阴性血是
- 天天最新:男性肝郁脾虚的症状_肝郁脾虚
- 每日看点!2022年成都主要商业体销售额排
- 环球快看:颐和园开门时间_颐和园开放时间
- 天天动态:展组词_汉字展组词
- 世界快报:帕玛森干酪的吃法_干酪的吃法
- 讯息:“信托一哥”股权变更,100%股权划
- 焦点精选!泰伦-卢:威少今天打得不错
- 环球快看:山东英才学院_山东英才学院贴吧
- 当前热文:万亩李花,花开似雪
- 信息:变更到站怎么操作都能成功吗_变更
- 环球短讯!我国地下基础设施监测技术获新
- 快看:上元戏呈贡父
- 最新消息:吃氨基酸什么牌子好_踩aj是什
- 【世界速看料】2022年安徽规模以上工业利
- 环球速讯:还剩2天!还未缴费的城乡居民
- 世界快看点丨香山瘦身
- 焦点短讯!亚马逊怎么联系客服_亚马逊怎
- 世界热讯:titan x pascal显卡_titan x
- 每日热门:水冷螺杆式冷水机组
- 要闻速递:“小修小补”便利店 居民生活
- 天天视点!梦的化石
- 全球快讯:董斌
- 世界看点:沪电股份:应用于4D车载雷达等
- 百事通!14集团军
- 热讯:CIMCAI world leading port ai
- 焦点快报!蔡徐坤在米兰时装被针对,外媒
- 【世界新视野】中国农村留守人口
- 全球观焦点:西安有什么好玩的_这几个地
- 世界观察:南京鼓楼区一鲜花店老板被约谈
- 播报:助力乡村人才振兴!国内首家“乡村
- 每日动态!中国生态补偿立法:路在前方
- 今日讯!自我介绍模板(客串喜灰)
- 【聚看点】可塑性记忆
- 环球热资讯!esq是什么汽车
- 前沿资讯!港警通报一起碎尸案,港媒:死
- 天天热讯:串饰绸缎西装外套
- 【焦点热闻】【盛世清北】2023年清华大学
- 【全球速看料】眉山一六旬老人欲跳河轻生
- 焦点热议:社会学专业
- 当前要闻:青岛莱西市推进高标椎农田建设
- 全球消息!ST中基: 独立董事对担保等事
- 全球快看点丨冲上热搜!为骗钱,骗子竟伪
- 环球视讯!书画人生:中国古代书画家的艺
- 【天天热闻】扬科维奇任国足新主帅具体详
- 世界观点:云涌科技:2022年度净利润约16
- 世界报道:云天海
- 微速讯:电讯首科(03997.HK):不宣布派付
- 天天播报:内蒙古煤矿坍塌事故最新进展:6
- 环球最资讯丨以军空袭加沙地带两处地点,
- 世界关注:九价疫苗打完三针管一辈子吗_