前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wal_buffers配置参数如何转换成XLOG页数

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

作者头像
yzsDBA
发布2023-02-26 13:09:38
1800
发布2023-02-26 13:09:38
举报

wal_buffers配置参数

Wal buffer是预写日志缓冲区,作为共享内存缓存每个事务产生的WAL日志。那么这个缓冲区多大呢?它由配置参数wal_buffers控制,默认值是-1,表示大小为shared_buffers的1/32,单位是字节大小,比如64kB。

我们在guc.c代码文件中找到对应的参数位置:在ConfigureNamesInt数组中

代码语言:javascript
复制
{
    {"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型:

代码语言:javascript
复制
int      XLOGbuffers = -1;

疑惑来了,wal_buffers是字节大小,配置文件中可以写成:64kB,这个又是如何转换成整型XLOGbuffers的?

看下wal buffer初始化流程:

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

代码语言:javascript
复制
XLOGShmemInit
    memset(XLogCtl->pages, 0, (Size) XLOG_BLCKSZ * XLOGbuffers);

Wal buffer即为XLogCtl->pages,大小为XLOG_BLCKSZ*XLOGbuffers。

另一个疑惑:wal_buffers如何由kB转换成页数的?

可以看下配置文件配置参数加载过程:

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档