毛片毛片女人毛片毛片 I 欧美精品一区视频 I 欧美一区二区公司 I 太久av I 欧美激情一区二区三区在线 I 不卡一区在线 I 免费视频亚洲 I 好爽好舒服要高潮了视频 I 国产欧美一区二区三区免费 I 国产后入清纯学生妹 I 日韩免费在线观看 I 香蕉免费一区二区三区在 I 精品一区二区免费视频 I 华人永久免费 I 免费人成在线观看vr网站 I 久久天天色综合 I 久久久久久久91 I 国产亚洲www I 亚洲教育网 I 日本欧美激情 I 超碰在线人人干 I 亚洲国产日韩a在线乱码 I 久久亚洲精品国产亚洲老地址 I 人人射人人干 I 亚洲欧美综合区 I 视频在线一区二区 I 亚洲成人在线网 I 精品人伦一区二区三电影 I 极品色影院在线观看 I 上av在线 I 成人免费看毛片 I 欧美孕妇高潮孕交视频 I 黑帮大佬和我的365日第二部 I 爱情岛亚洲首页论坛 I 成 人 免费 在线电影

您的位置:首頁 >觀察 > 正文

天天觀察: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

熱門資訊

主站蜘蛛池模板: 99热久久这里只有精品99 | 麻豆av传媒蜜桃天美传媒 | 欧美成人午夜精品久久久 | 精品国产久 | 66亚洲一卡2卡新区成片发布 | 久久久久999 | 亚洲高清资源 | 久久久国产精华液 | 免费情侣作爱视频 | 亚洲色成人一区二区三区小说 | 97婷婷色| 无码一区二区三区久久精品 | 国产欧美日韩精品a在线观看高清 | 欧美日韩精品久久久免费观看 | 18禁白丝喷水视频www视频 | 欧洲精品免费一区二区三区 | 国产精品美女久久久 | 麻豆一区二区三区蜜桃免费 | 日韩高清成片免费视频 | 欧美日韩中文字幕在线观看 | 久久久成人毛片无码 | 久久国产精品久久喷水 | 日本久久综合网 | 精品国产黄a∨片高清在线 亚洲3atv精品一区二区三区 | 久女女热精品视频在线观看 | 色综合精品久久久久久久 | 97人妻天天爽夜夜爽二区 | 色婷婷久久一区二区三区麻豆 | 91专区在线观看 | 一国产一级淫片a免费播放口 | 久久国产成人午夜av影院 | 亚洲综合图片色婷婷另类小说 | 久久国产加勒比精品无码 | 免费激情视频在线观看 | 中文字幕亚洲无线码在线一区 | 日韩在线欧美 | 国产馆精品推荐在线观看 | 麻豆视频秘密入口 | 久久人 | 国产精品系列无码专区 | 粗了大了 整进去好爽视频 粗壮挺进人妻水蜜桃成熟漫画 | 网友自拍视频在线 | 久久亚洲国产成人亚 | 亚洲爆乳无码一区二区三区 | 欧美理论影院在线观看免费 | 日韩精品一区二区三区中文 | 国产精品视频全国免费观看 | 国产精品免费网站 | 亚洲国产精品视频 | 欧美黑人粗大猛烈18p | 免费看av的网址 | 色情无码www视频无码区小黄鸭 | 国产成人亚洲综合色 | 国产又粗又硬又大爽黄老大爷视频 | 国产精品无码专区av在线播放 | 久久无码av中文出轨人妻 | 狠狠操91| 日韩精品中文字幕久久 | 久久综合伊人77777 | 亚洲免费一 | 精品一区二区三区网站 | 国产成人精品一区二区视频 | 色在线视频 | 婷婷在线免费视频 | 动漫av网站免费观看 | 中文字幕日韩精品有码视频 | 欧美一级二级三级 | 国产熟妇高潮呻吟喷水 | 午夜精品久久久久久久99黑人 | 人人妻人人澡人人爽国产一区 | 久久精品久久久久久 | 91精品国产91久久久久久吃药 | 日韩成人无码一区二区三区 | 亚洲国产三级在线观看 | 国内久久久久影院精品 | 亚洲成在人线av | 日本人妻精品免费视频 | 久久97精品久久久久久久看片 | 97精品国产 | 日韩精品久久久久久 | 丰满熟妇乱子伦 | 日韩三级视频 | 欧美亚洲激情视频 | 91精品国产露脸在线 | 中文字幕日本电影 | 精品国产乱码久久久久久1区2区 | 黄色一级大片在线免费看产 | 蜜桃免费一区二区三区 | 99久久99久久精品国产片 | 久久精品国产99精品国产亚洲性色 | 新神奇四侠免费完整版在线观看 | 久久99精品这里精品动漫6 | 人人草在线 | 国产日产精品一区二区三区四区的特点 | 黄色片免费在线 | 久久国产色 | 亚洲综合久久1区2区3区 | 国产精品嫩草久久久久 | 亚州激情|