postgresql如何維護WAL日誌/歸檔日誌

来源:http://www.cnblogs.com/lottu/archive/2017/09/07/7490814.html
-Advertisement-
Play Games

WAL日誌介紹 wal全稱是write ahead log,是postgresql中的online redo log,是為了保證資料庫中數據的一致性和事務的完整性。而在PostgreSQL 7中引入的技術。它的中心思想是“先寫日誌後寫數據”,即要保證對資料庫文件的修改應放生在這些修改已經寫入到日誌之 ...


WAL日誌介紹

  wal全稱是write ahead log,是postgresql中的online redo log,是為了保證資料庫中數據的一致性和事務的完整性。而在PostgreSQL 7中引入的技術。它的中心思想是“先寫日誌後寫數據”,即要保證對資料庫文件的修改應放生在這些修改已經寫入到日誌之後,同時,在PostgreSQL 8.3以後又加入了WalWriter日誌寫進程,可以保證事務提交記錄不是在提交時同步寫入到磁碟,而是非同步寫入,這樣就極大的減輕了I/O的壓力。所以說WAL日誌很重要。對保證資料庫中數據的一致性和事務的完整性。

  PostgreSQL的WAL日誌文件在pg_xlog目錄下,一般情況下,每個文件為16M大小:000000010000000000000010文件名稱為16進位的24個字元組成,每8個字元一組,每組的意義如下:

  • 時間線:英文為timeline,是以1開始的遞增數字,如1,2,3...
  • LogId:32bit長的一個數字,是以0開始遞增的數字,如0,1,2,3...
  • LogSeg:32bit長的一個數字,是以0開始遞增的數字,如0,1,2,3...

wal日誌跟online redo log一樣,其個數,也不是無限的。歸檔日誌就出現了。

WAL日誌維護

1. 參數max_wal_size/min_wal_size
  9.5以前: (2 + checkpoint_completion_target) * checkpoint_segments + 1
  9.5:PostgreSQL 9.5 將廢棄checkpoint_segments 參數, 並引入max_wal_size 和 min_wal_size 參數, 
   通過max_wal_size和checkpoint_completion_target 參數來控制產生多少個XLOG後觸發檢查點, 
   通過min_wal_size和max_wal_size參數來控制哪些XLOG可以迴圈使用。
2. 參數wal_keep_segments
   在流複製的環境中。使用流複製建好備庫,如果備庫由於某些原因接收日誌較慢。導致備庫還未接收到。就被覆蓋了。導致主備無法同步。這個需要重建備庫。
   避免這種情況提供了該參數。每個日誌文件大小16M。如果參數設置64. 占用大概64×16=1GB的空間。根據實際環境設置。
3. pg_resetxlog
  在前面參數設置合理的話。是用不到pg_resetxlog命令。
  使用案例參考: https://my.oschina.net/Kenyon/blog/101432
[postgres@postgres128 ~]$ pg_resetxlog -?
pg_resetxlog resets the PostgreSQL transaction log.

Usage:
  pg_resetxlog [OPTION]... DATADIR

Options:
  -c XID,XID       set oldest and newest transactions bearing commit timestamp
                   (zero in either value means no change)
 [-D] DATADIR      data directory
  -e XIDEPOCH      set next transaction ID epoch
  -f               force update to be done
  -l XLOGFILE      force minimum WAL starting location for new transaction log
  -m MXID,MXID     set next and oldest multitransaction ID
  -n               no update, just show what would be done (for testing)
  -o OID           set next OID
  -O OFFSET        set next multitransaction offset
  -V, --version    output version information, then exit
  -x XID           set next transaction ID
  -?, --help       show this help, then exit

Report bugs to <pgsql-bugs@postgresql.org>.      

歸檔日誌維護

1. pg_archivecleanup清理歸檔日誌。
[postgres@postgres128 ~]$ pg_archivecleanup -?
pg_archivecleanup removes older WAL files from PostgreSQL archives.

Usage:
  pg_archivecleanup [OPTION]... ARCHIVELOCATION OLDESTKEPTWALFILE

Options:
  -d             generate debug output (verbose mode)
  -n             dry run, show the names of the files that would be removed
  -V, --version  output version information, then exit
  -x EXT         clean up files if they have this extension
  -?, --help     show this help, then exit

For use as archive_cleanup_command in recovery.conf when standby_mode = on:
  archive_cleanup_command = 'pg_archivecleanup [OPTION]... ARCHIVELOCATION %r'
e.g.
  archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %r'

Or for use as a standalone archive cleaner:
e.g.
  pg_archivecleanup /mnt/server/archiverdir 000000010000000000000010.00000020.backup

1.1 當主庫不斷把WAL日誌拷貝到備庫。這個時候需要清理。在recovery.conf可以配置  
e.g.   archive_cleanup_command = 'pg_archivecleanup /mnt/server/archiverdir %r'
1.2 可以收到執行命令。
e.g.  pg_archivecleanup /home/postgres/arch/ 000000010000000000000009
在歸檔目錄/home/postgres/arch/ 把000000010000000000000009之前的日誌都清理。

2. pg_rman備份
參考博客 http://www.cnblogs.com/lottu/p/7490615.html
在pg_rman備份保留策略中。在每天都備份。可以清理歸檔日誌。
對流複製環境中。備份一般是在備庫。可以把歸檔日誌傳送到備庫中。
  --keep-arclog-files=NUM   keep NUM of archived WAL
  --keep-arclog-days=DAY    keep archived WAL modified in DAY days
e.g 保留歸檔日誌個數10。或者保留10天內的歸檔日誌。 
KEEP_ARCLOG_FILES = 10  
KEEP_ARCLOG_DAYS = 10   
在備份信息中會產生以下信息。
INFO: start deleting old archived WAL files from ARCLOG_PATH (keep files = 10, keep days = 10)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 僅供自己看,別人也看不太明白。 public Map getMap(){ map.put("lshcjl","xxx"); map.put("zpsc","xxxx"); return map;}ModuleName moduleName = new ModuleName();final Map m ...
  • 要先給app設置訪問相冊的許可權: 在項目的Info.plist文件里添加Privacy - Photo Library Usage Description許可權 ViewController.h: ViewController.m: ...
  • 1、- (void)applicationWillResignActive:(UIApplication *)application 說明:當應用程式將要入非活動狀態執行,在此期間,應用程式不接收消息或事件,比如來電話了 2、- (void)applicationDidBecomeActive:(U ...
  • 開發播放器的時候,經常需要檢測app進入後臺(暫停播放)或者進入前臺(開始播放)。方法非常簡單。 1.檢測app進入後臺 // 在AppDelete實現該方法 - (void)applicationDidEnterBackground:(UIApplication *)application { / ...
  • 圖片文件放在項目目錄下 ...
  • MUI框架,要實現手勢縮放圖片,可以使用imageviewer組件來實現。代碼很簡單: mui.imageviewer.css可以從MUI的SDK(或者實常式序)中找到 ...
  • 版權聲明:本文為 stormzhang 原創文章,可以隨意轉載,但必須在明確位置註明出處!!! 這篇博客背後的故事 一路走來很不容易,剛好知乎上被人邀請回答如何自學android編程, 就借這個機會在知乎上記錄一路走來的歷程,很勵志,希望能給那些正在或準備走編程行業的人一些正能量,內容有點長,感興趣 ...
  • JOIN的含義就如英文單詞“join”一樣,連接兩張表,大致分為內連接,外連接,右連接,左連接,自然連接。這裡描述先甩出一張用爛了的圖,然後插入測試數據。 CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...