PostgreSQL WAL日志膨脹的處理過(guò)程
第一部分 描述
PostgreSQL由于WAL日志的機(jī)制,導(dǎo)致其在不正確配置的情況下會(huì)出現(xiàn)磁盤空間暴漲的情況,本文檔就此情景寫一般處理辦法。
第二部分 場(chǎng)景復(fù)現(xiàn)及處理過(guò)程
2.1 基本描述
某一客戶反映,有一個(gè)PostgreSQL數(shù)據(jù)庫(kù)的數(shù)據(jù)目錄增長(zhǎng)非常大,500G的總磁盤空間,剩余23G,通過(guò)du -sh $PGDATA/*對(duì)數(shù)據(jù)目錄進(jìn)行統(tǒng)計(jì)分析,發(fā)現(xiàn)大部分的空間都被pg_wal目錄占用,文件數(shù)量達(dá)到1w+。
2.2 查看相關(guān)配置
查看可能會(huì)造成原因的相關(guān)參數(shù),checkpoint_timeout是可能造成wal大量生成的原因之一,當(dāng)max_wal_size=20GB時(shí),可能會(huì)出現(xiàn)在進(jìn)行checkpoint之間,如果出現(xiàn)大事物或者寫入量非常大的時(shí)候,最大可能會(huì)生成(20*1024)/16=1280個(gè)wal文件
適當(dāng)調(diào)整后,發(fā)現(xiàn)由于事務(wù)量比較大,即使調(diào)小參數(shù),還是會(huì)不斷生成文件,接著查看歸檔是否出現(xiàn)問(wèn)題
postgres=# show checkpoint_timeout ; checkpoint_timeout -------------------- 60min (1 row) postgres=# show max_wal_size ; max_wal_size -------------- 20GB (1 row) postgres=# show min_wal_size ; min_wal_size -------------- 80MB (1 row) postgres=# show wal_keep_size ; wal_keep_segments --------------- 128 (1 row)
2.3 查看歸檔配置
可以看到歸檔已經(jīng)開(kāi)啟,檢查歸檔路徑是否存在,在pg_wal/ archive_status文件中記錄wal文件的歸檔狀態(tài)是否正常,檢查下來(lái)都沒(méi)有發(fā)現(xiàn)問(wèn)題,如果說(shuō)歸檔沒(méi)有成功進(jìn)行,wal日志也是無(wú)法移除造成空間迅增
postgres=# show archive_mode ;
archive_mode
--------------
on
(1 row)
postgres=# show archive_command ;
archive_command
------------------------------------------------------------------------------------
test ! -f /software/pgsql12/archivedir/%f && cp %p /software/pgsql12/archivedir/%f
(1 row)
2.4 查看是否有備庫(kù)
查看是否有流復(fù)制環(huán)境,流復(fù)制環(huán)境中,主要靠wal日志進(jìn)行主備同步,當(dāng)主備環(huán)境之間差異過(guò)大,或者出問(wèn)題后,造成主備沒(méi)有同步,則會(huì)保留wal日志不進(jìn)行刪除。如果有差異的話,wal_keep_segments參數(shù)會(huì)生效,它會(huì)為備庫(kù)保留相應(yīng)數(shù)量的wal日志文件、甚至更多。
postgres=# select * from pg_stat_replication ;

確認(rèn)沒(méi)有備庫(kù)環(huán)境
2.5 查看是否有復(fù)制槽
是否存在無(wú)效的復(fù)制槽,備庫(kù)如果沒(méi)有進(jìn)行同步或者說(shuō)沒(méi)有消費(fèi)wal日志,那么該復(fù)制槽不可用,wal日志也會(huì)一直保留,造成wal日志不斷增加
postgres=# select * from pg_replication_slots;
查詢到果然存在一個(gè)active狀態(tài)為f的復(fù)制槽,我們嘗試刪除該復(fù)制槽
SELECT * FROM pg_drop_replication_slot('pg_102');
刪除后,發(fā)現(xiàn)pg_wal空間不再增長(zhǎng),一段時(shí)間后已自動(dòng)釋放
到此這篇關(guān)于PostgreSQL WAL日志膨脹的處理過(guò)程的文章就介紹到這了,更多相關(guān)PostgreSQL WAL日志膨脹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在PostgreSQL中實(shí)現(xiàn)自增的三種方式
本文介紹了在 PostgreSQL 中創(chuàng)建自增列的三種方法:直接使用序列(sequence)、使用 serial 數(shù)據(jù)類型,以及使用 identity column 語(yǔ)法,文章通過(guò)實(shí)際示例詳細(xì)講解了每種方法的語(yǔ)法、行為和使用場(chǎng)景,需要的朋友可以參考下2026-04-04
postgreSQL 數(shù)字與字符串類型轉(zhuǎn)換操作
這篇文章主要介紹了postgreSQL 數(shù)字與字符串類型轉(zhuǎn)換操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
PostgreSQL實(shí)現(xiàn)數(shù)據(jù)表跨庫(kù)同步的四種方案
文章詳細(xì)介紹了四種用于實(shí)現(xiàn)PostgreSQL數(shù)據(jù)庫(kù)表數(shù)據(jù)變化實(shí)時(shí)或定時(shí)同步到另一個(gè)獨(dú)立PG庫(kù)的方法,包括觸發(fā)器+外部表、邏輯復(fù)制、Debezium+Kafka和pg_dump定時(shí)任務(wù),針對(duì)不同場(chǎng)景和需求,推薦了最適合的方案,并詳細(xì)闡述了各自的優(yōu)點(diǎn)、適用場(chǎng)景、配置方法和使用注意事項(xiàng)2026-05-05
PostgreSQL無(wú)法查看表中數(shù)據(jù)問(wèn)題的原因和解決方法
在 PostgreSQL 中,恢復(fù)數(shù)據(jù)庫(kù)后,使用 DBeaver 等工具可以看到數(shù)據(jù)庫(kù)和表名,但無(wú)法查詢到表中數(shù)據(jù),可能有很多原因,本文給大家分析了PostgreSQL無(wú)法查看表中數(shù)據(jù)問(wèn)題的原因和解決方法,需要的朋友可以參考下2025-04-04
PostgreSQL教程(五):函數(shù)和操作符詳解(1)
這篇文章主要介紹了PostgreSQL教程(五):函數(shù)和操作符詳解(1),本文講解了邏輯操作符、比較操作符、數(shù)學(xué)函數(shù)和操作符、三角函數(shù)列表、字符串函數(shù)和操作符等內(nèi)容,需要的朋友可以參考下2015-05-05
免密使用PostgreSQL數(shù)據(jù)庫(kù)內(nèi)置工具的兩種方法
我們?cè)赑ostgreSQL數(shù)據(jù)庫(kù)自帶的各種工具時(shí),每次使用都要輸入數(shù)據(jù)庫(kù)密碼,這里我們通過(guò)配置的方式,以后再使用這些工具就不需要輸入數(shù)據(jù)庫(kù)密碼了,需要的朋友可以參考下2025-03-03
PostgreSQL如何選擇合適的數(shù)據(jù)類型
本文詳細(xì)介紹了PostgreSQL中各種數(shù)據(jù)類型的特性、適用場(chǎng)景、潛在陷阱及最佳實(shí)踐,涵蓋了數(shù)值、字符、時(shí)間、布爾、枚舉、網(wǎng)絡(luò)、JSON、幾何、全文搜索、范圍、自定義類型等核心類別,并通過(guò)真實(shí)案例說(shuō)明了數(shù)據(jù)類型選型的邏輯,感興趣的朋友跟隨小編一起看看吧2026-01-01

