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

    目录
    相关文章
    |
    存储 缓存 Java
    |
    5月前
    |
    缓存 关系型数据库 MySQL
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    97 3
    |
    存储 缓存 监控
    PG中的WAL:1 buffer cache
    PG中的WAL:1 buffer cache
    125 0
    |
    关系型数据库
    PG修改数据页页头等信息时是否会产生WAL?
    PG修改数据页页头等信息时是否会产生WAL?
    69 0
    |
    存储 关系型数据库
    PG检查点刷写脏页CheckPointGuts
    PG检查点刷写脏页CheckPointGuts
    135 0
    |
    关系型数据库 MySQL 数据库
    修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
    一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
    368 0
    |
    存储 安全 数据库
    LotusDB 设计与实现—2 WAL 日志
    WAL 是 Write Ahead Log 的简称,通常叫做预写日志,是为了预防内存崩溃,保证数据不丢失的常用手段。WAL 是 LSM 存储模型中重要的组件,在 LotusDB 当中的重要性是一样的。
    454 0
    |
    存储 SQL 缓存
    写缓冲(change buffer),这次彻底懂了!!!
    一次了解缓冲池(buffer pool)。
    586 0
    写缓冲(change buffer),这次彻底懂了!!!
    |
    关系型数据库 分布式数据库 PolarDB
    InnoDB buffer pool flush 策略
    ### InnoDB buffer pool flush 策略 **1. 刷脏整体策略** 首先从整体上来说, 刷脏的coordinator_thread 会判断进入哪一种场景刷脏 在 buf_flush_page_coordinator_thread() 函数里面 刷脏主要有3个场景 1. 如果 buf_flush_sync_lsn > 0, 则因为r
    744 0