PostgreSQL wal_buffers 自动计算算法

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介:

标签

PostgreSQL , wal_buffers , shared_buffers


背景

当wal_buffers设置为-1时,PG会自动计算一个值,取决于几个因素,wal_segment_size, shared_buffer.

算法

src/backend/access/transam/xlog.c

/*  
 * GUC check_hook for wal_buffers  
 */  
bool  
check_wal_buffers(int *newval, void **extra, GucSource source)  
{  
        /*  
         * -1 indicates a request for auto-tune.  
         */  
        if (*newval == -1)  
        {  
                /*  
                 * If we haven't yet changed the boot_val default of -1, just let it  
                 * be.  We'll fix it when XLOGShmemSize is called.  
                 */  
                if (XLOGbuffers == -1)  
                        return true;  
  
                /* Otherwise, substitute the auto-tune value */  
                *newval = XLOGChooseNumBuffers();  
        }  
  
        /*  
         * We clamp manually-set values to at least 4 blocks.  Prior to PostgreSQL  
         * 9.1, a minimum of 4 was enforced by guc.c, but since that is no longer  
         * the case, we just silently treat such values as a request for the  
         * minimum.  (We could throw an error instead, but that doesn't seem very  
         * helpful.)  
         */  
        if (*newval < 4)  
                *newval = 4;  
  
        return true;  
}  
  
  
/*  
 * Auto-tune the number of XLOG buffers.  
 *  
 * The preferred setting for wal_buffers is about 3% of shared_buffers, with  
 * a maximum of one XLOG segment (there is little reason to think that more  
 * is helpful, at least so long as we force an fsync when switching log files)  
 * and a minimum of 8 blocks (which was the default value prior to PostgreSQL  
 * 9.1, when auto-tuning was added).  
 *  
 * This should not be called until NBuffers has received its final value.  
 */  
static int  
XLOGChooseNumBuffers(void)  
{  
        int                     xbuffers;  
  
        xbuffers = NBuffers / 32;  
        if (xbuffers > (wal_segment_size / XLOG_BLCKSZ))  
                xbuffers = (wal_segment_size / XLOG_BLCKSZ);  
        if (xbuffers < 8)  
                xbuffers = 8;  
        return xbuffers;  
}  

算法

自动计算:shared_buffers/32

上限:wal_segment_size/XLOG_BLCKSZ

下限:8*XLOG_BLCKSZ

例子

postgres=# show wal_segment_size ;  
 wal_segment_size   
------------------  
 16MB  
(1 row)  
  
postgres=# show wal_block_size  ;  
 wal_block_size   
----------------  
 8192  
(1 row)  
  
postgres=# show shared_buffers ;  
 shared_buffers   
----------------  
 32GB  
(1 row)  

以上参数,如果wal_buffers设置为-1,那么自动计算得到的值为16MB.

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
68 0
|
3月前
|
存储 关系型数据库 Serverless
PostgreSQL计算两个点之间的距离
PostgreSQL计算两个点之间的距离
360 60
|
2月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
71 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
3月前
|
算法 C++
如何精确计算出一个算法的CPU运行时间?
如何精确计算出一个算法的CPU运行时间?
|
4月前
|
算法 Go Python
[算法]计算斐波拉契数列
[算法]计算斐波拉契数列
|
4月前
|
算法
计算空间物体包围球的两种算法实现
计算空间物体包围球的两种算法实现
52 0
|
6月前
|
机器学习/深度学习 算法
**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。
【6月更文挑战第28天】**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。数据从输入层流经隐藏层到输出层,计算预测值。接着,比较预测与真实值计算损失。然后,从输出层开始,利用链式法则反向计算误差和梯度,更新权重以减小损失。此过程迭代进行,直到损失收敛或达到训练次数,优化模型性能。反向传播实现了自动微分,使模型能适应训练数据并泛化到新数据。
72 2
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
368 0
|
存储 缓存 关系型数据库

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版