文档章节

参数max_wal_size与min_wal_size的计算与影响

有理想的猪
 有理想的猪
发布于 2016/06/04 10:42
字数 304
阅读 752
收藏 2

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

© 著作权归作者所有

共有 人打赏支持
有理想的猪
粉丝 136
博文 91
码字总数 32273
作品 0
红挢
高级程序员
私信 提问
论调整检查点的基础知识

论调整检查点的基础知识 作者tomas.vondra(http://blog.2ndquadrant.com/author/tomas-vondra/) 原文 http://blog.2ndquadrant.com/basics-of-tuning-checkpoints/ 翻译: 亭亭小次郎 在系统......

MtrS
2016/11/25
34
0
pg 10 wal 归档同步配置

一.rsync server(172.16.3.226) CentOS 7.2 X64 # yum install -y rsync # mkdir -p -m 0700 /db/wal_archive # chown -R postgres.postgres /db/wal_archive 可能存在的问题: 修改目录/db......

pgmia
2017/05/25
0
0
PostgresSQL-内存分配

postgresql的内存分配主要由sharedbuffers、tempbuffers、workmem、maintenancework_mem参数控制。 sharedbuffers又可以叫做共享缓冲区,postgresql对数据操作时都要先将数据从磁盘读取到内存...

angie_hawk7
2015/03/24
0
0
InfluxDB config

简单的介绍一下InfluxDB config,官方文档解释的也不是很全面细致。 每过24小时,InfluxDB会匿名的给m.influxdb.com发送一些信息,这些信息包括raft id、os、version等信息,InfluxDB并不跟踪...

China_OS
2015/10/10
746
0
MySQL · myrocks · MyRocks之memtable切换与刷盘

概述 MyRocks的memtable默认是skiplist,其大小和个数分别由参数writebuffersize和maxwritebuffer_number控制。数据写入时先写入active memtable, 当active memtable写满时,active memtable...

阿里云RDS-数据库内核组
2017/06/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【Mysql技术内幕】第2章 InnoDB存储引擎

2.6 InnoDB关键特性 插入缓冲 两次写 自适应哈希索引 异步IO 刷新邻接页 2.6.1 插入缓冲 通常应用程序中行记录的插入顺序是按照主键的递增顺序进行插入的,因此插入聚集索引(Primary Key)一...

HOT_POT
54分钟前
2
0
Java8 如何正确使用 Optional

原文链接:https://blog.kaaass.net/archives/764 Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在...

大灰狼时间
55分钟前
2
0
富兰克林的人生信条

春节假期期间读了富兰克林自传,这位饱经风霜的老人出身贫寒,只读过两年书,但是通过刻苦自学和不懈奋斗还是取得了令人难以置信的成就,他的一生可以作为我们普通人的励志典范。 富兰克林 ...

春哥大魔王的博客
今天
1
0
不用中间变量交换 a ,b(三种方法)

1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失。 a = a + b; b = a - b; a = a - b; 2、异或法:可以完成对整型变量的交换,对于浮点型变量它...

robslove
今天
6
0
一文了解 OutOfMemory 及解决方案

1. Java 堆空间 发生频率 5颗星 造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立...

java菜分享
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部