技術(shù)文章:PostgreSQL pg_resetwal處理機制
pg_resetwal的參數(shù)
ControlFile結(jié)構(gòu)及pg_resetwal參數(shù)影響的字段
static struct option long_options[] = { {"commit-timestamp-ids", required_argument, NULL, 'c'}, {"pgdata", required_argument, NULL, 'D'}, {"epoch", required_argument, NULL, 'e'}, {"force", no_argument, NULL, 'f'}, {"next-wal-file", required_argument, NULL, 'l'}, {"multixact-ids", required_argument, NULL, 'm'}, {"dry-run", no_argument, NULL, 'n'}, {"next-oid", required_argument, NULL, 'o'}, {"multixact-offset", required_argument, NULL, 'O'}, {"next-transaction-id", required_argument, NULL, 'x'}, {"wal-segsize", required_argument, NULL, 1}, {NULL, 0, NULL, 0} };
介紹
PG11允許用戶在線修改WAL段文件大小。以往版本需要重新編譯,并且不同--wal-segsize設(shè)置的PG相互不兼容。這個值范圍1—1024,為2的平方且單位M。當(dāng)改變大小時建議和-l參數(shù)一起使用,設(shè)置下一個WAL文件名,防止重復(fù)使用之前的名字。下一個段文件名要比當(dāng)前已存在的都要大,
該工具會將WAL目錄下日志全部刪除,并生成一個新WAL段文件。該文件名起名規(guī)則:
1、-l指定的段文件名解析出段號minXlogSegNo
2、FindEndOfXLOG掃描WAL目錄下所有文件得到最大的文件號:
1)newXlogSegNo為pg_control文件中記錄的ckp所屬段號
2)若目錄下由比這個號大的,則更新newXlogSegNo為該段號
3)該段號轉(zhuǎn)換成WAL長度后,除以新段文件大小得到新段文件段號newXlogSegNo,將之+1作為新段文件的段號
3、原pg_control文件中的ckp作為CHECKPOINT記錄寫入新段文件里面。該段文件僅寫這一個WAL,后面的大小全部清0。
4、新pg_control文件的checkpoint位置為該文件中CHECKPOINT記錄位置。
5、這個工具比較危險,慎用。
6、在主備環(huán)境中,備機啟動不起來,且日志損壞時,主機數(shù)據(jù)量非常大,全量重新拷貝又耗費時間特別長,此時可以嘗試使用這個工具:
1)比較備機和主機的pg_control文件的checkpoint位置,若備機和主機記錄的checkpoint位置相等,則可以執(zhí)行pg_resetwal,這樣重新啟動后可以正常構(gòu)建流復(fù)制,數(shù)據(jù)也不會丟
2)若備機的checkpoint小,使用這個pg_control文件進(jìn)行pg_resetwal可能重啟后構(gòu)建不起來流復(fù)制。使用主機的pg_control文件進(jìn)行pg_resetwal,重啟后可構(gòu)建流復(fù)制,但丟數(shù)據(jù)
3)若備機的checkpoint大,使用這個pg_control文件進(jìn)行pg_resetwal,可能重啟后構(gòu)建不起來流復(fù)制,即使構(gòu)建起來也丟數(shù)據(jù)。使用主機的pg_control文件進(jìn)行pg_resetwal,應(yīng)該也可以正常。
4)備機的時間線文件需要清理
流程
pg_control文件的更新,然后調(diào)用KillExistingXLOG刪除pg_wal目錄下的所有WAL文件:
while(errno = 0, (xlde = readdir(xldir)) 。 NULL){ if(IsXLogFileName(xlde->d_name) || IsPartialXLogFileName(xlde->d_name)){ snprintf(path,sizeof(path), "%s/%s", XLOGDIR, xlde->d_name); if(unlink(path) < 0){ pg_log_error("couldnot delete file "%s": %m", path); exit(1); } } }
調(diào)用函數(shù)KillExistingArchiveStatus刪除archive_status目錄下.ready,.done和.partial.ready、.partial.done文件:
while(errno = 0, (xlde = readdir(xldir)) 。 NULL){ if(strspn(xlde->d_name, "0123456789ABCDEF") == XLOG_FNAME_LEN&& (strcmp(xlde->d_name+ XLOG_FNAME_LEN, ".ready") == 0 || strcmp(xlde->d_name + XLOG_FNAME_LEN,".done") == 0 || strcmp(xlde->d_name + XLOG_FNAME_LEN,".partial.ready") == 0 || strcmp(xlde->d_name + XLOG_FNAME_LEN,".partial.done") == 0)) { snprintf(path,sizeof(path), "%s/%s", ARCHSTATDIR, xlde->d_name); if(unlink(path) < 0){ pg_log_error("couldnot delete file "%s": %m", path); exit(1); } } }
最后調(diào)用函數(shù)WriteEmptyXLOG創(chuàng)建一個新WAL段文件,并僅寫入一個checkpoint記錄,其中checkpoint記錄來自ControlFile結(jié)構(gòu)。

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-9.1立即下載>> 【限時下載】ADI中國三十周年感恩回饋助力企業(yè)升級!
-
11月27日立即報名>> 【工程師系列】汽車電子技術(shù)在線大會
-
精彩回顧立即查看>> 【在線研討會】解析安森美(onsemi)高精度與超低功耗CGM系統(tǒng)解決方案
-
精彩回顧立即查看>> 【在線會議】CAE優(yōu)化設(shè)計:醫(yī)療器械設(shè)計的應(yīng)用案例與方案解析
-
精彩回顧立即查看>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書》
-
精彩回顧立即查看>> 7月30日- 8月1日 2025全數(shù)會工業(yè)芯片與傳感儀表展
推薦專題
- 1 傳魏建軍與賈躍亭合作,長城汽車出海美國
- 2 黃仁勛:與雷軍長期合作,共探AI智駕
- 3 阿里首位程序員,“掃地僧”多隆已離職
- 4 DeepSeek R2加持,中國AI與芯片產(chǎn)業(yè)迎來新一輪協(xié)同進(jìn)化
- 5 六大國產(chǎn)大模型,誰是最強“金融分析師”?|錦緞評測
- 6 2025年第一支10倍股,來了!
- 7 募資39.85億元!寒武紀(jì)押注大模型芯片與軟件平臺
- 8 國內(nèi)免費版Deep Research上線,秘塔AI深度研究嘗試重塑知識工作范式
- 9 清庫存?曝英偉達(dá)H20供應(yīng)有限,且沒有復(fù)產(chǎn)計劃
- 10 具身智能機器人量產(chǎn)前夜,標(biāo)準(zhǔn)機腦正在成型