zoukankan      html  css  js  c++  java
  • PostgreSQL之WAL日志归档配置

    关于pg_wal

    pg的wal日志保存在数据库目录下的pg_wal/子目录

    这个日志存在的目的是为了保证崩溃后的安全,如果系统崩溃,可以“重放”从最后一次检查点以来的日志项来恢复数据库的一致性。
    但是也存在日志膨胀的问题
    pg提供如下参数控制wal日志的大小
    max_wal_size = 1GB
    min_wal_size = 80MB
     
    测试一下
    1、查看当前pg_wal目录大小
    [postgres@mingfan pg_wal]$ pwd
    /usr/local/pgsql/data/pg_wal
    [postgres@mingfan pg_wal]$ du -sh
    16M .

    2、插入可产生约2Gwal日志的数据

    create table t1(a int);
    insert into t1 values (generate_series(1,10000000));
    insert into t1 values (generate_series(1,10000000));
    insert into t1 values (generate_series(1,10000000));
    insert into t1 values (generate_series(1,10000000));

    3、查看当前pg_wal目录大小

    [postgres@mingfan pg_wal]$ du -sh
    1.1G    .

    基本符合预期,看下官方的介绍:

    max_wal_size (integer)
    在自动 WAL 检查点之间允许 WAL 增长到的最大尺寸。这是一个软限制, 在特殊的情况下 WAL 尺寸可能会超过max_wal_size, 例如在重度负荷下、archive_command失败或者高的 wal_keep_segments设置。如果指定值时没有单位,则以兆字节为单位。默认为 1GB。增加这个参数 可能导致崩溃恢复所需的时间。这个参数只能在postgresql.conf 或者服务器命令行中设置。
    min_wal_size (integer)
    只要 WAL 磁盘用量保持在这个设置之下,在检查点时旧的 WAL 文件总是 被回收以便未来使用,而不是直接被删除。这可以被用来确保有足够的 WAL 空间被保留来应付 WAL 使用的高峰,例如运行大型的批处理任务。 如果指定值时没有单位,则以兆字节为单位。默认是 80 MB。这个参数只能在postgresql.conf 或者服务器命令行中设置。

    关于归档

    在生产环境,为了保证数据高可用性,通常需要设置归档,所谓的归档,其实就是把pg_wal里面的日志备份出来,当系统故障后可以通过归档的日志文件对数据进行恢复:

    配置归档需要开启如下参数:

    • wal_level = replica (pg13默认已经开启replica)
      该参数的可选的值有minimal,replica和logical,wal的级别依次增高,在wal的信息也越多。由于minimal这一级别的wal不包含从基础的备份和wal日志重建数据的足够信息,在该模式下,无法开启wal日志归档

    • archive_mode = on
      上述参数为on,表示打开归档备份,可选的参数为on,off,always 默认值为off,所以要手动打开

    • archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
      该参数的默认值是一个空字符串,他的值可以是一条shell命令或者一个复杂的shell脚本。在shell脚本或命令中可以用 “%p” 表示将要归档的wal文件包含完整路径的信息的文件名,用“%f” 代表不包含路径信息的wal文件的文件名

    注意:wal_level和archive_mode参数修改都需要重新启动数据库才可以生效。而修改archive_command则不需要。所以一般配置新系统时,无论当时是否需要归档,这要建议将这两个参数开启

    测试一下

    1、配置参数

    # - Archiving -
    
    archive_mode = on               # enables archiving; off, on, or always
                                    # (change requires restart)
    archive_command = 'test ! -f /usr/local/pgsql/archive/%f && cp %p /usr/local/pgsql/archive/%f'  

    2、重启数据库

    pg_ctl -D /usr/local/pgsql/data/ restart

    3、插入数据,查看归档

    insert into t1 values (generate_series(1,10000000));

     4、查看pg_wal

    archive_status下会有已经完成归档的日志信息

     

     通过归档进程也可以看到当前完成归档的日志

  • 相关阅读:
    PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)
    PyQt5单元格操作大全
    PyQt5打印机
    PyQt5剪切板操作
    PyQt5的菜单栏、工具栏和状态栏
    PyQt5日历控件及相关操作
    PyQt5控件支持拖拽方法
    《Lua程序设计》第3章 表达式 学习笔记
    Lua中的table构造式(table constructor)
    《Lua程序设计》第2章 类型与值 学习笔记
  • 原文地址:https://www.cnblogs.com/mingfan/p/14038680.html
Copyright © 2011-2022 走看看