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

    目录
    相关文章
    |
    6月前
    |
    缓存 关系型数据库 MySQL
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    MySQL数据库——InnoDB引擎-架构-内存结构(Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer)
    114 3
    |
    存储 缓存 监控
    PG中的WAL:1 buffer cache
    PG中的WAL:1 buffer cache
    136 0
    |
    关系型数据库
    PG修改数据页页头等信息时是否会产生WAL?
    PG修改数据页页头等信息时是否会产生WAL?
    75 0
    |
    SQL 关系型数据库 索引
    PG获取文件大小的方式
    PG获取文件大小的方式
    151 0
    |
    关系型数据库 MySQL Windows
    解决mysql max_allowed_packet 太小 造成的程序查询数据报错问题
    1.因为mysql有一个max_allowed_packet变量,可以控制其通信缓冲区的最大长度,所以当缓冲区的大小太小的时候,导致某些查询和插入操作报错。 解决方法如下, 2.解决方法 2.1 修改配置文件 a .可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。 max_allowed_packet = 20M
    655 0
    |
    关系型数据库 MySQL 数据库
    修改innodb_buffer_pool_instances解决mysqlbinlog恢复慢的问题
    一个客户的mysql数据库恢复在最后一步是滚binlog,结果恢复特别慢,CPU占用率100%,磁盘IO几乎是零,show processlist发现线程在sleep。从general log里面看不到任何动静,似乎找不到解决的办法。
    373 0
    |
    SQL 关系型数据库 MySQL
    MGR修改max_binlog_cache_size参数导致异常
    MGR修改max_binlog_cache_size参数导致异常
    173 0
    MGR修改max_binlog_cache_size参数导致异常
    |
    关系型数据库 数据库 PostgreSQL
    Write-Ahead Logging (WAL)相关参数配置
    Write-Ahead Logging (WAL)是保证数据完整性的标准方法,在大多数关于事务处理的书中都可以找到详细的描述。 简单的说,WAL的核心思想是确保数据文件的更改必须在这些更改被写入日志之后才能进行。
    1960 0