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

    目录
    相关文章
    |
    2月前
    |
    缓存 关系型数据库 MySQL
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    81 3
    |
    存储 缓存 监控
    PG中的WAL:1 buffer cache
    PG中的WAL:1 buffer cache
    113 0
    |
    关系型数据库
    PG修改数据页页头等信息时是否会产生WAL?
    PG修改数据页页头等信息时是否会产生WAL?
    56 0
    |
    存储 关系型数据库
    PG检查点刷写脏页CheckPointGuts
    PG检查点刷写脏页CheckPointGuts
    109 0
    |
    关系型数据库 MySQL 数据库
    修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
    一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
    356 0
    |
    存储 安全 数据库
    LotusDB 设计与实现—2 WAL 日志
    WAL 是 Write Ahead Log 的简称,通常叫做预写日志,是为了预防内存崩溃,保证数据不丢失的常用手段。WAL 是 LSM 存储模型中重要的组件,在 LotusDB 当中的重要性是一样的。
    390 0
    |
    存储 SQL 缓存
    写缓冲(change buffer),这次彻底懂了!!!
    一次了解缓冲池(buffer pool)。
    541 0
    写缓冲(change buffer),这次彻底懂了!!!
    |
    关系型数据库 数据库 PostgreSQL
    Write-Ahead Logging (WAL)相关参数配置
    Write-Ahead Logging (WAL)是保证数据完整性的标准方法,在大多数关于事务处理的书中都可以找到详细的描述。 简单的说,WAL的核心思想是确保数据文件的更改必须在这些更改被写入日志之后才能进行。
    1928 0
    |
    监控 关系型数据库 数据库
    pg_resetxlog清理的pg_xlog下的WAL日志
    PostgreSQL的pg_xlog下有大量日志,空间不足,如何删除? Darren1:postgres:/usr/local/pgsql/data/pg_xlog:>ls 000000010000000000000008.
    1338 0