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日志维护

. 参数max_wal_size/min_wal_size
  .5以前: ( + checkpoint_completion_target) * checkpoint_segments +
  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可以循环使用。
. 参数wal_keep_segments
   在流复制的环境中。使用流复制建好备库,如果备库由于某些原因接收日志较慢。导致备库还未接收到。就被覆盖了。导致主备无法同步。这个需要重建备库。
   避免这种情况提供了该参数。每个日志文件大小16M。如果参数设置64. 占用大概64×=1GB的空间。根据实际环境设置。
. pg_resetxlog
  在前面参数设置合理的话。是用不到pg_resetxlog命令。
  使用案例参考: https://
[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>.      

归档日志维护

. 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/
在归档目录/home/postgres/arch/ 把000000010000000000000009之前的日志都清理。

. pg_rman备份
参考博客 http://www.cnblogs.com/lottu/p/.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 =
KEEP_ARCLOG_DAYS =
在备份信息中会产生以下信息。
INFO: start deleting old archived WAL files from ARCLOG_PATH (keep files = , keep days = )

postgresql如何维护WAL日志/归档日志的更多相关文章

  1. oracle归档日志管理

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档 ...

  2. oracle归档日志配置查询

    归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志的内容保存到归档 ...

  3. oracle之 Oracle归档日志管理

    在Oracle中,数据一般是存放在数据文件中,不过数据库与Oracle最大的区别之一就是数据库可以在数据出错的时候进行恢复.这个也就是我们常见的Oracle中的重做日志(REDO FILE)的功能了. ...

  4. RMAN备份归档日志ORA-19575

    RMAN备份归档日志ORA-19575 一.问题描述 1)环境oracle 10g; 2)报错现象RMAN进行备份归档报错失败ORA-19575 二.问题处理 1)根据客户说明的现象,百度了一波(详见 ...

  5. PostgreSQL归档日志 手动触发归档 select pg_switch_xlog()

    (转,做记录) 一 环境信息--1.1 PostgreSQL 版本 9.3.0 --1.2 postgresql.conf wal_level = hot_standbyarchive_mode = ...

  6. oracle日志归档空间清理

    进入机器,设置环境变量,如: export ORACLE_HOME=/main/app/oracle/product//db_1 export ORACLE_SID=devdb 然后切换oracle用 ...

  7. oracle 归档日志总结

    Oracle 归档模式和非归档模式 归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行 ...

  8. Oracle的归档日志

    归档模式的特点和要求 在归档模式下,当LGWR后台进程的写操作从一个重做日志组切换到另一个重做日志组后,归档写后台进程(ARCH/ARCRn)就会将原来的重做日志的信息复制到归档日志文件中. 可以把归 ...

  9. Oracle 归档日志管理

    一.Oracle日志介绍 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和            redo log ...

随机推荐

  1. WAS 部署 Birt 报表出现 error.CannotStartupOSGIPlatform 和 更新web.xml

    在WAS7.0中部署Birt报表会出现error.CannotStartupOSGIPlatform错误,通常需要这样修改 1.依次打开Applications->WebSphere enter ...

  2. 深入浅出数据结构C语言版(12)——从二分查找到二叉树

    在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不 ...

  3. ++i,i++和i += 1的区别

    ++i,i++和i += 1的区别 单条语句:i++;.++i;和 i += 1;等价. int i = 0; ++i; // 或者i++;或者i += 1; cout << i < ...

  4. swift 获取文件大小

    //获取文件大小 func getSize(url: URL)->UInt64 { var fileSize : UInt64 = 0 do { let attr = try FileManag ...

  5. recycleView 使用指南1

    最近看了很多 recycleView 的使用文章,一直晕乎乎的,完全不知道套路是啥.很多人都是直接上代码,但是却没有详细说明代码的使用,于是打算自己写写,理理思路.顺便帮助那些正在学习 android ...

  6. overlay 是如何隔离的?- 每天5分钟玩转 Docker 容器技术(53)

    不同的 overlay 网络是相互隔离的.我们创建第二个 overlay 网络 ov_net2 并运行容器 bbox3. bbox3 分配到的 IP 是 10.0.1.2,尝试 ping bbox1( ...

  7. 关于dfs+剪枝第一篇:hdu1010

    最近进入了dfs关于剪枝方面的学习,遇到的第一道题就是hdu的1010.一道很基础的剪枝..可我不幸地wa了很多次(待会再解释wa的原因吧QAQ),首先我们来看一下题目. Problem Descri ...

  8. bootstrap模态框远程加载网页的正确处理方式

    bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...

  9. php+mysql事务处理例子详细分析实例下载

    一.数据引擎innodb用begin,rollback,commit来实现提交事务处理,begin开始事务后出现错误就rollback事务回滚或者没有错误就commit提事务提交确认完成. start ...

  10. js的基础要点

    javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行.比如进行页面显示初始化的js必须放在head里面,因为初始 ...