参数max_wal_size与min_wal_size的计算与影响

1、GUC参数最大最小值的设置是一个开区间,我们看实数的设置

if (newval->realval < conf->min || newval->realval > conf->max)

2、checkpoint_completion_target 取值范围 (0.0, 1.0)

	{
		{"checkpoint_completion_target", PGC_SIGHUP, WAL_CHECKPOINTS,
			gettext_noop("Time spent flushing dirty buffers during checkpoint, as fraction of checkpoint interval."),
			NULL
		},
		&CheckPointCompletionTarget,
		0.5, 0.0, 1.0,
		NULL, NULL, NULL
	},

3、新参数 min_wal_size、max_wal_size
以前叫做 checkpoint_segments 已经消失,原意是 Maximum number of log file segments between automatic WAL checkpoints

4、max_wal_size 的定义和计算方式

	{
		{"max_wal_size", PGC_SIGHUP, WAL_CHECKPOINTS,
			gettext_noop("Sets the WAL size that triggers a checkpoint."),
			NULL,
			GUC_UNIT_XSEGS
		},
		&max_wal_size,
		64, 2, INT_MAX,
		NULL, assign_max_wal_size, NULL
	},

公式

	{"TB", GUC_UNIT_XSEGS, (1024 * 1024 * 1024) / (XLOG_SEG_SIZE / 1024)},
	{"GB", GUC_UNIT_XSEGS, (1024 * 1024) / (XLOG_SEG_SIZE / 1024)},
	{"MB", GUC_UNIT_XSEGS, -(XLOG_SEG_SIZE / (1024 * 1024))},
	{"kB", GUC_UNIT_XSEGS, -(XLOG_SEG_SIZE / 1024)},

结合 GUC代码知道,最后得到的值已经是段数

5、每次 checkpoint 涉及的最大段数,原来是由我们通过参数来直接指定的,而现在

	target = (double) max_wal_size / (2.0 + CheckPointCompletionTarget);

	/* round down */
	CheckPointSegments = (int) target;

	if (CheckPointSegments < 1)
		CheckPointSegments = 1;

我们知道 CheckPointCompletionTarget 取值范围是 (0.0, 1.0),所以最终CheckPointSegments得到的值范围是 max_wal_size 的 1/3 ~ 1/2,最小为1。

--------------------------------------------
权宗亮
神州飞象(北京)数据科技有限公司
我们的力量源自最先进的开源数据库PostgreSQL
zongliang.quan@postgresdata.com

转载于:https://my.oschina.net/quanzl/blog/686932

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值