wal_buffers配置参数如何转换成XLOG页数

简介: wal_buffers配置参数如何转换成XLOG页数

wal_buffers配置参数Wal buffer是预写日志缓冲区,作为共享内存缓存每个事务产生的WAL日志。那么这个缓冲区多大呢?它由配置参数wal_buffers控制,默认值是-1,表示大小为shared_buffers1/32,单位是字节大小,比如64kB我们在guc.c代码文件中找到对应的参数位置:在ConfigureNamesInt数组中

    {
        {"wal_buffers", PGC_POSTMASTER, WAL_SETTINGS,
          gettext_noop("Sets the number of disk-page buffers in shared memory for WAL."),
          NULL,
          GUC_UNIT_XBLOCKS | GUC_NOT_IN_SAMPLE
        },
        &XLOGbuffers,
        -1, -1, (INT_MAX / XLOG_BLCKSZ),
        check_wal_buffers, NULL, NULL
      },

    也就是wal_buffers在代码中对应的变量值为XLOGbuffers,这个值是int型:


    int      XLOGbuffers = -1;

    疑惑来了,wal_buffers是字节大小,配置文件中可以写成:64kB,这个又是如何转换成整型XLOGbuffers的?看下wal buffer初始化流程:

    WAL BUFFER大小:可以了解到XLOGbuffers是页数,每页大小XLOG_BLCKSZ



    XLOGShmemInit    memset(XLogCtl->pages, 0, (Size) XLOG_BLCKSZ * XLOGbuffers);

    Wal buffer即为XLogCtl->pages,大小为XLOG_BLCKSZ*XLOGbuffers另一个疑惑:wal_buffers如何由kB转换成页数的?可以看下配置文件配置参数加载过程:

    SelectConfigFiles函数为加载postgresql.conf文件,并解析配置项到变量。在此parse_int函数中进行转换。

    目录
    相关文章
    |
    16小时前
    |
    关系型数据库 MySQL
    innodb_buffer_pool_size 配置文件设置的值和查询的值怎么不一致
    您可以配置缓冲池大小 脱机或在服务器运行时。中描述的行为 本节适用于这两种方法。更多信息 关于在线配置缓冲池大小,请参阅在线配置 InnoDB 缓冲池大小。InnoDB 当增加或减少innodb_buffer_pool_size时, 操作以块的形式执行。块大小由 innodb_buffer_pool_chunk_size 配置选项定义,该选项的缺省值为 。有关更多信息,请参阅配置 InnoDB 缓冲池区块大小。128M 缓冲池大小必须始终等于 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 的倍数或倍数。 如果将in
    |
    10月前
    |
    存储 缓存 监控
    PG中的WAL:1 buffer cache
    PG中的WAL:1 buffer cache
    99 0
    |
    10月前
    |
    关系型数据库
    PG修改数据页页头等信息时是否会产生WAL?
    PG修改数据页页头等信息时是否会产生WAL?
    43 0
    |
    10月前
    |
    SQL 关系型数据库 索引
    PG获取文件大小的方式
    PG获取文件大小的方式
    75 0
    |
    11月前
    |
    SQL 缓存 运维
    InnoDB重做日志架构和innodb_redo_log_capacity系统变量(译文)
    说明:从MySQL 8.0.30开始,InnoDB的重做日志架构发生了重大变化,重做日志文件被固定为32个,并存放在一个专门的目录下面,用户可以使用系统变量innodb_redo_log_capacity在线修改重做日志容量,原来的innodb_log_files_in_group和innodb_log_file_size两个系统变量已经废弃。
    159 0
    |
    12月前
    |
    关系型数据库 MySQL 数据库
    修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
    一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
    340 0
    |
    SQL 关系型数据库 MySQL
    MGR修改max_binlog_cache_size参数导致异常
    MGR修改max_binlog_cache_size参数导致异常
    137 0
    MGR修改max_binlog_cache_size参数导致异常
    |
    存储 SQL 缓存
    写缓冲(change buffer),这次彻底懂了!!!
    一次了解缓冲池(buffer pool)。
    501 0
    写缓冲(change buffer),这次彻底懂了!!!
    |
    关系型数据库 数据库 PostgreSQL
    Write-Ahead Logging (WAL)相关参数配置
    Write-Ahead Logging (WAL)是保证数据完整性的标准方法,在大多数关于事务处理的书中都可以找到详细的描述。 简单的说,WAL的核心思想是确保数据文件的更改必须在这些更改被写入日志之后才能进行。
    1898 0
    |
    监控 关系型数据库 数据库
    pg_resetxlog清理的pg_xlog下的WAL日志
    PostgreSQL的pg_xlog下有大量日志,空间不足,如何删除? Darren1:postgres:/usr/local/pgsql/data/pg_xlog:>ls 000000010000000000000008.
    1320 0