在线看成人I亚州精品视频Iwww.日日日.comI色中射I久久久久99精品国产片I高清精品在线I2021国产在线

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

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

熱門資訊

主站蜘蛛池模板: 亚洲精品无码永久中文字幕 | 亚洲乱码中文字幕久久孕妇黑人 | 亚洲成av | 久久免费视频一区二区三区 | 无码人妻av一区二区三区蜜臀 | a视频在线播放 | 久久国产欧美日韩精品图片 | 国产乱码一区二区三区爽爽爽 | 亚洲成av人片在线播放无码 | 看国产毛片| 99久久久无码国产精品古装 | 亚洲综合色一区二区三区另类 | 91精品国产综合久久婷婷香蕉 | 中文在线а√在线 | 巨胸爆乳美女露双奶头挤奶 | 色欲香天天天综合网站无码 | 一本大道香蕉中文日本不卡高清二区 | 四川老熟女下面又黑又肥 | 亚洲国产精品无码av | 自拍日韩亚洲一区在线 | 人妻精油按摩bd高清中文字幕 | 精品AV综合一区二区三区 | 中文字幕日本人妻久久久免费 | 性久久久久久久久久 | 韩国美女激情视频一区二区 | 国产精品边做奶水狂喷 | 国产精品亲子乱子伦xxxx裸 | 欧美精品第三页 | 成熟自由日本语热亚洲人 | 欧美午夜一区二区三区免费大片 | 免费无码av片在线观看 | av 一区二区三区 | 欧美区在线 | 九色在线视频 | 久久99国产精品久久99果冻传媒 | 国产精品人妻在线观看 | 999久久久免费精品国产 | 97在线观视频免费观看 | 无码人妻精品一区二区三区66 | 亚洲天堂在线电影 | 无限看片在线版免费视频大全 | 亚洲永久 | 黑人狂躁日本妞无码A片 | 国产精品爱久久久久久久 | 日日噜噜夜夜狠狠va视频 | 欧美高清在线视频一区二区 | av免费资源 | 国产日本三级欧美三级妇三级四 | 毛片免费观看网址 | 日韩a级片 | 一级啪啪片 | 久久免费看少妇高潮A片麻豆 | 欧美黄色xxx| 国产精品久久久久蜜臀 | 天天做夜夜操 | 亚洲欧美国产双大乳头 | 久久人人爽av亚洲精品天堂 | 91嫩草精品 | 女邻居的大乳中文字幕 | 波多野结衣在线播放 | 精品欧美小视频在线观看 | 亚洲精品无码一区二区三区久久久 | 99re6热视频精品免费观看 | 欧美性xx| 激情六月丁香婷婷 | 天天操天天射天天操 | 日本牲交大片免费观看 | 丰满岳乱妇一区二区三区 | 91精品午夜 | 欧美精品一区二区三区在线 | 中国xxxx做受视频 | 色噜噜在线观看 | 国产女人高潮毛片 | 亚洲欧美另类在线观看 | 国产麻豆剧传媒精品国产av | xxxxhdvideosex| 亚洲成人精品在线观看 | 欧美一二三区在线 | 日韩精品欧美高清区 | 十八禁啪啪无遮挡网站 | 欧美人与禽猛交狂配 | 亚洲亚洲人成综合丝袜图片 | 国产色产综合色产在线观看视频 | 国产乱码人妻一区二区三区四区 | 久久99热这里只频精品6中文字幕 | 啊啊啊好紧好爽 | 亚洲精品字幕在线观看 | 日本午夜大片免费观看视频 | jizz日本在线播放 | 国产视频在线免费观看 | 中文精品久久久久国产网址 | 人妻少妇456在线视频 | 黄色视屏免费观看 | 午夜在线视频观看 | 国产日韩欧美久久久 | 国产成人精品免费久久久久 | 性生交大全免费看 | 一本大道色婷婷在线 | 天天做天天爱天天综合网2021 |