技術(shù)文章:PostgreSQL pg_resetwal處理機(jī)制
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相互不兼容。這個(gè)值范圍1—1024,為2的平方且單位M。當(dāng)改變大小時(shí)建議和-l參數(shù)一起使用,設(shè)置下一個(gè)WAL文件名,防止重復(fù)使用之前的名字。下一個(gè)段文件名要比當(dāng)前已存在的都要大,
該工具會(huì)將WAL目錄下日志全部刪除,并生成一個(gè)新WAL段文件。該文件名起名規(guī)則:
1、-l指定的段文件名解析出段號(hào)minXlogSegNo
2、FindEndOfXLOG掃描WAL目錄下所有文件得到最大的文件號(hào):
1)newXlogSegNo為pg_control文件中記錄的ckp所屬段號(hào)
2)若目錄下由比這個(gè)號(hào)大的,則更新newXlogSegNo為該段號(hào)
3)該段號(hào)轉(zhuǎn)換成WAL長(zhǎng)度后,除以新段文件大小得到新段文件段號(hào)newXlogSegNo,將之+1作為新段文件的段號(hào)
3、原pg_control文件中的ckp作為CHECKPOINT記錄寫入新段文件里面。該段文件僅寫這一個(gè)WAL,后面的大小全部清0。
4、新pg_control文件的checkpoint位置為該文件中CHECKPOINT記錄位置。
5、這個(gè)工具比較危險(xiǎn),慎用。
6、在主備環(huán)境中,備機(jī)啟動(dòng)不起來,且日志損壞時(shí),主機(jī)數(shù)據(jù)量非常大,全量重新拷貝又耗費(fèi)時(shí)間特別長(zhǎng),此時(shí)可以嘗試使用這個(gè)工具:
1)比較備機(jī)和主機(jī)的pg_control文件的checkpoint位置,若備機(jī)和主機(jī)記錄的checkpoint位置相等,則可以執(zhí)行pg_resetwal,這樣重新啟動(dòng)后可以正常構(gòu)建流復(fù)制,數(shù)據(jù)也不會(huì)丟
2)若備機(jī)的checkpoint小,使用這個(gè)pg_control文件進(jìn)行pg_resetwal可能重啟后構(gòu)建不起來流復(fù)制。使用主機(jī)的pg_control文件進(jìn)行pg_resetwal,重啟后可構(gòu)建流復(fù)制,但丟數(shù)據(jù)
3)若備機(jī)的checkpoint大,使用這個(gè)pg_control文件進(jìn)行pg_resetwal,可能重啟后構(gòu)建不起來流復(fù)制,即使構(gòu)建起來也丟數(shù)據(jù)。使用主機(jī)的pg_control文件進(jìn)行pg_resetwal,應(yīng)該也可以正常。
4)備機(jī)的時(shí)間線文件需要清理
流程
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)建一個(gè)新WAL段文件,并僅寫入一個(gè)checkpoint記錄,其中checkpoint記錄來自ControlFile結(jié)構(gòu)。

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
圖片新聞
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
-
小米汽車研發(fā)中心重磅落地,寶馬家門口“搶人”
最新活動(dòng)更多
-
即日-9.16點(diǎn)擊進(jìn)入 >> 【限時(shí)福利】TE 2025國(guó)際物聯(lián)網(wǎng)展·深圳站
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
- 1 先進(jìn)算力新選擇 | 2025華為算力場(chǎng)景發(fā)布會(huì)暨北京xPN伙伴大會(huì)成功舉辦
- 2 人形機(jī)器人,正狂奔在批量交付的曠野
- 3 宇樹機(jī)器人撞人事件的深度剖析:六維力傳感器如何成為人機(jī)安全的關(guān)鍵屏障
- 4 解碼特斯拉新AI芯片戰(zhàn)略 :從Dojo到AI5和AI6推理引擎
- 5 AI版“四萬(wàn)億刺激”計(jì)劃來了
- 6 騰訊 Q2 財(cái)報(bào)亮眼:AI 已成第二增長(zhǎng)曲線
- 7 2025年8月人工智能投融資觀察
- 8 9 Manus跑路,大廠掉線,只能靠DeepSeek了
- 10 a16z最新AI百?gòu)?qiáng)榜:硅谷頂級(jí)VC帶你讀懂全球生成式AI賽道最新趨勢(shì)