pg_basebackup熱備如何保證數據一致性

      網友投稿 1263 2025-04-02

      所謂熱備就是在數據庫不停機的情況下對數據做備份,不影響數據業務,在備份過程中數據不斷的改變,PG是如何保證即使數據改變了也能不影響備份呢,這里WAL LOG起了很重要的作用,使用一份基礎數據加上一些增量數據能實現這個過程。


      PG的備份使用了基礎文件加上WAL LOG來保證數據的一致性,基礎文件是寫入到磁盤的已經固化下來的數據,這通過在備份前做一次checkpoint來保證內存中的臟數據全部刷新到磁盤中,而WAL LOG保存的是在備份過程中改變的數據,這樣,利用基礎文件+WAL 日志可以將數據庫推到一個數據一致的時間點。

      1、 開始備份,設置force_page_writes=true

      2、 做一次checkpoint將臟數據刷新到磁盤

      3、 開始拷貝數據,同時開始用流復制的方式復制備份過程中產生的WAL日志

      以上基礎文件+WAL文件看似完美,但實際上不是這樣的,因為操作系統不能保證PG的數據頁完整的寫入到磁盤中。

      在PG服務器上,內存中的臟頁是持續的寫入到磁盤中的,寫入過程中一般是以頁為單位來操作,如果在內存數據刷盤得時候正好去拷貝數據,很有可能拷貝到半頁數據,PG默認每個page的大小為8K,一般情況下,PG數據頁是以page為單位寫入的,但在斷電,操作系統崩潰或者熱操作(熱備)時,極有可能導致部分數據快只寫到4K(操作系統一般是以4K為單位寫磁盤),這些“部分寫”的頁面包含新舊數據的混合,在崩潰后的恢復期間,由于頁已經是損壞的頁,無法恢復,而在WAL日志里面存儲的記錄變化信息不夠完整,也無法恢復該頁,導致數據庫啟動失敗。

      1、 用戶DML操作,比如update數據

      2、 數據從磁盤讀入到內存,并在內存中做了修改,產生臟數據

      3、 內存中臟數據刷新到磁盤文件,同時,用戶備份操作開始拷貝數據

      4、 由于寫文件(刷盤)和讀文件(拷貝)同時進行,導致拷貝的文件出現半頁寫的不完整數據。

      PG用force_page_write解決這個問題,它的原理是在checkpoint之后對所有數據頁面的第一次寫的時候將整個數據頁同時寫入到xlog中。

      備注:設置full_page_writes=on后,checkpoint后對每個頁中數據的第一次修改都會將整個頁全部保存到WAL日志中,如果修改的數據比較零散,可能導致WAL日志大量增加,給系統磁盤帶來很大壓力。

      在沒有半頁寫的情況下,WAL日志中保存的整頁數據是沒用的,不會覆蓋到數據文件中,例如:

      1、 開始恢復

      pg_basebackup熱備如何保證數據一致性

      2、 Checksum檢查數據頁,沒有發現半寫情況

      3、 使用WAL日志恢復備份過程中產生的增量數據

      4、 恢復完成

      異常出現后,redo操作時通過checksum發現“半寫”的數據頁,并將xlog中保存的完整頁覆蓋當前損壞的數據頁,然后再繼續做redo,就可以恢復整個數據庫。

      1、 開始恢復

      2、 Checksum檢查數據頁,發現有半頁寫的壞數據

      3、 使用WAL中保存的整頁數據來修復半頁寫數據頁

      4、 WAL日志恢復半頁寫壞數據

      5、 使用WAL日志恢復備份過程中產生的增量數據

      6、 恢復完成

      Pg_basebackup過程中應用了full_page_write這項技術,在主要流程中,開始調用了do_pg_start_backup()函數,接著開始拷貝數據,在結束的時候調用了do_pg_stop_backup()函數do_pg_start_backup()函數首先設置了full_page_write=on(對應的參數是XlogCtrl->Insert.forcePageWrites= true)然后做了一次checkpoint,

      do_pg_stop_backup()函數是對do_pg_start_backup()函數修改過的一些參數做恢復操作,也就是說在備份過程中保持full_page_write=on。

      因為full_page_write需要在xlog中記錄數據頁,會寫更多xlog文件,不僅有數據變化信息,還有數據頁本身信息,這樣會增加額外的IO和磁盤消耗,把full_page_write這個選項關閉會提高數據庫執行速度以及減少xlog數量,但是可能導致系統崩潰或者掉電之后的數據庫損壞。 如果有減小部分頁面寫入風險的硬件支持(比如電池供電的磁盤控制器), 或者文件系統支持(能夠保證page寫入原子性),可以把風險降低到一個可以接受的范圍, 那么可以考慮關閉這個選項,其他情況下建議打開這個選擇。

      數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:AR工業應用-一文讀懂為何現代制造業急需數字孿生和AR遠程協助?(二)
      下一篇:Excel表格中怎樣設置復選框(excel單元格復選框設置是否)
      相關文章
      亚洲综合精品伊人久久| 国产成A人亚洲精V品无码性色| 久久亚洲国产成人影院网站| 最新亚洲人成网站在线观看| 亚洲精品国产高清在线观看| 亚洲熟妇无码AV不卡在线播放| 亚洲成AV人片久久| 99久久精品国产亚洲| 亚洲无删减国产精品一区| 久久久无码精品亚洲日韩按摩 | 亚洲AV无码国产精品麻豆天美| 亚洲乱码中文字幕综合| 久久精品国产亚洲麻豆| 亚洲国产精品无码成人片久久| 亚洲AV综合色区无码一区爱AV | 国产精品亚洲专区无码牛牛| 亚洲AV无码专区在线厂| 国产亚洲午夜精品| 亚洲国产精品第一区二区三区| 亚洲国产91精品无码专区| 亚洲国产午夜福利在线播放| 亚洲AV无码乱码在线观看牲色| 亚洲伊人久久综合中文成人网| 伊人久久亚洲综合| 亚洲AV无码专区在线播放中文| 亚洲日本在线看片| 亚洲校园春色小说| 亚洲最大中文字幕无码网站| 亚洲七久久之综合七久久| 男人的天堂av亚洲一区2区| 亚洲成片观看四虎永久| 亚洲综合无码AV一区二区| 日本亚洲成高清一区二区三区| 亚洲一区二区三区夜色| 久久精品国产亚洲AV电影| 亚洲ts人妖网站| 亚洲av日韩综合一区二区三区| 亚洲国产中文v高清在线观看| 在线观看亚洲av每日更新| 亚洲国产综合专区在线电影| 亚洲另类小说图片|