• 首页
  • 粮食
  • 蔬菜
  • 果品
  • 水产
  • 酒水
  • 饮料
  • 茶叶
  • 畜禽
  • 食用油
  • 资讯
logo
  • 首页>
  • 水产 >
  • 正文

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

2023-03-07 02:25:41 来源:腾讯云


(资料图片)

总结

从原理上来看,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吗?

    水产2023-03-07
  • 不容易!赵率舟成江苏队史第五位单场砍下35+的本土球员:全球百事通

    水产2023-03-06
  • 天天最新:春夜雨霏霏完整版_春夜雨霏霏

    水产2023-03-06
  • 去上班的英文怎么读_去上班的英文-世界最资讯

    水产2023-03-06
  • hcg是什么意思 环球新消息

    水产2023-03-06
  • 立方数科: 关于董事辞职暨补选董事的公告|世界速递

    水产2023-03-06
  • 两部门:鼓励有条件的地方在重点工程中使用获证梯次利用的新能源汽车动力电池产品_环球要闻

    水产2023-03-06
  • 【全球聚看点】历史上姓胡的名人有哪些

    水产2023-03-06
  • 滚动:长沙医保每个月返多少钱到医保卡

    水产2023-03-06
  • 原谅把你带走的雨天 世界播报

    水产2023-03-06
  • 上海迪士尼官宣:恢复游客与迪士尼朋友拥抱、合影等互动体验

    水产2023-03-06
  • 全球今日报丨长三角志愿服务一体化发展论坛在德清举行

    水产2023-03-06
  • 曾志伟在哪部电影中饰演警察

    水产2023-03-06
  • 小白也能变大厨九阳智能炒菜机活动价仅需1699元_全球即时

    水产2023-03-06
  • 天天关注:土豆发电视频_土豆发电

    水产2023-03-06
  • GDP增速为何是5%左右?楼市风向有何变化?机构解读_全球新要闻

    水产2023-03-06
  • 清明节和重阳节哪个没有固定日期:天天微头条

    水产2023-03-05
  • 03月05日20时北京昨日累计报告阳性感染者确诊27061例 怎么判断自己是否属于轻型感染者|全球讯息

    水产2023-03-05
  • 即时看!秸秆气化

    水产2023-03-05
  • 恒瑞医药(600276.SH):抗癌药“阿得贝利单抗注射液”获批注册_焦点消息

    水产2023-03-05

果品

  • 北京2022年冬奥会、冬残奥会奖牌“同心”正式发布
  • 冬奥故事会丨一图了解冬奥会历届奖牌
  • 同心筑梦向未来——写在北京冬奥会开幕倒计时100天之际
  • 外交部:美国针对亚裔仇恨犯罪数字令人痛心

蔬菜

  • 说好“一梯一户”却成了“两梯两户”,买方能否解除合同?
  • 更高水平开放合作助力中国东盟经贸发展迎新机遇
  • 9被告人犯侵犯著作权罪被判刑罚
  • 玉渊谭天丨中美再通话,“建设性”很重要
  • 环球时报社评:中美经贸需要建设性对话
  • 俄媒:莫斯科扩大新冠感染新疗法试点范围
  • 冰雪之约 中国之邀 | 追赶的勇气
  • 中国第20批赴黎维和建筑工兵分队完成“VA-2”道路排水系统修缮任务
  • 中国常驻联合国代表团举办恢复联合国合法席位50周年图片展
  • 美专家认为三大原因导致美国供应链危机

Copyright   2015-2022 北冰洋食品网 版权所有  备案号:沪ICP备2020036824号-3   联系邮箱:562 66 29@qq.com