PostgreSQL wal_buffers 自动计算算法

简介:

标签

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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
3月前
|
算法 机器人
基于SOA海鸥优化算法的PID控制器最优控制参数计算matlab仿真
本课题研究基于海鸥优化算法(SOA)优化PID控制器参数的方法,通过MATLAB仿真对比传统PID控制效果。利用SOA算法优化PID的kp、ki、kd参数,以积分绝对误差(IAE)为适应度函数,提升系统响应速度与稳定性。仿真结果表明,SOA优化的PID控制器在阶跃响应和误差控制方面均优于传统方法,具有更快的收敛速度和更强的全局寻优能力,适用于复杂系统的参数整定。
|
7月前
|
算法 JavaScript 数据安全/隐私保护
基于GA遗传优化的最优阈值计算认知异构网络(CHN)能量检测算法matlab仿真
本内容介绍了一种基于GA遗传优化的阈值计算方法在认知异构网络(CHN)中的应用。通过Matlab2022a实现算法,完整代码含中文注释与操作视频。能量检测算法用于感知主用户信号,其性能依赖检测阈值。传统固定阈值方法易受噪声影响,而GA算法通过模拟生物进化,在复杂环境中自动优化阈值,提高频谱感知准确性,增强CHN的通信效率与资源利用率。预览效果无水印,核心程序部分展示,适合研究频谱感知与优化算法的学者参考。
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
261 0
|
9月前
|
算法 数据安全/隐私保护
基于Big-Bang-Big-Crunch(BBBC)算法的目标函数最小值计算matlab仿真
该程序基于Big-Bang-Big-Crunch (BBBC)算法,在MATLAB2022A中实现目标函数最小值的计算与仿真。通过模拟宇宙大爆炸和大收缩过程,算法在解空间中搜索最优解。程序初始化随机解集,经过扩张和收缩阶段逐步逼近全局最优解,并记录每次迭代的最佳适应度。最终输出最佳解及其对应的目标函数最小值,并绘制收敛曲线展示优化过程。 核心代码实现了主循环、粒子位置更新、适应度评估及最优解更新等功能。程序运行后无水印,提供清晰的结果展示。
243 14
|
存储 关系型数据库 Serverless
PostgreSQL计算两个点之间的距离
PostgreSQL计算两个点之间的距离
1164 60
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
326 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
算法 C++
如何精确计算出一个算法的CPU运行时间?
如何精确计算出一个算法的CPU运行时间?
|
6月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
810 2
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
562 0

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版
  • 推荐镜像

    更多