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函数中进行转换。

    目录
    相关文章
    |
    7月前
    |
    关系型数据库 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
    |
    6月前
    |
    缓存 关系型数据库 MySQL
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    109 3
    |
    存储 缓存 监控
    PG中的WAL:1 buffer cache
    PG中的WAL:1 buffer cache
    135 0
    |
    SQL 关系型数据库 索引
    PG获取文件大小的方式
    PG获取文件大小的方式
    144 0
    |
    关系型数据库
    PG修改数据页页头等信息时是否会产生WAL?
    PG修改数据页页头等信息时是否会产生WAL?
    74 0
    |
    关系型数据库 MySQL 数据库
    修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
    一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
    372 0
    |
    SQL 关系型数据库 MySQL
    MGR修改max_binlog_cache_size参数导致异常
    MGR修改max_binlog_cache_size参数导致异常
    170 0
    MGR修改max_binlog_cache_size参数导致异常
    |
    存储 缓存 关系型数据库
    Redo日志 (4)—log sequence number(六十二)
    Redo日志 (4)—log sequence number(六十二)
    |
    监控 关系型数据库 数据库
    pg_resetxlog清理的pg_xlog下的WAL日志
    PostgreSQL的pg_xlog下有大量日志,空间不足,如何删除? Darren1:postgres:/usr/local/pgsql/data/pg_xlog:>ls 000000010000000000000008.
    1364 0