十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PostgreSQL-WAL日志

PostgreSQL-WAL日志 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...LogId32bit长的一个数字是以0开始递增的数字如0,1,2,3...LogSeg32bit长的一个数字是以0开始递增的数字如0,1,2,3...wal日志跟online redo log一样其个数也不是无限的。归档日志就出现了。WAL日志维护1. 参数max_wal_size/min_wal_size9.5以前(2 checkpoint_completion_target) * checkpoint_segments 19.5PostgreSQL 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×161GB的空间。根据实际环境设置。3. pg_resetxlog在前面参数设置合理的话。是用不到pg_resetxlog命令。[postgrespostgres128 ~]$ 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-bugspostgresql.org.归档日志维护1. pg_archivecleanup清理归档日志。[postgrespostgres128 ~]$ 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备份在pg_rman备份保留策略中。在每天都备份。可以清理归档日志。对流复制环境中。备份一般是在备库。可以把归档日志传送到备库中。--keep-arclog-filesNUM keep NUM of archived WAL--keep-arclog-daysDAY keep archived WAL modified in DAY dayse.g 保留归档日志个数10。或者保留10天内的归档日志。KEEP_ARCLOG_FILES 10KEEP_ARCLOG_DAYS 10在备份信息中会产生以下信息。INFO: start deleting old archived WAL files from ARCLOG_PATH (keep files 10, keep days 10)
返回列表