【PostgreSQL的wal_buffers】

news2024/11/18 3:31:53

1、什么是wal buffer?

wal buffer是预写日志(wal)缓冲区

2、wal buffer的作用是什么

用于还未写入磁盘的 WAL 数据的共享内存。

每次变更事务提交时候,需要将变更事务日志落盘,在PG中为了提高性能,并非采用实时flush到磁盘,而是在PG中提供XLog Buffer空间临时存储提交的事务日志,然后定期flush到磁盘。一旦任何给定的 8kB 缓冲区的内容持久地保存在磁盘上,就可以重复使用该缓冲区 。由于插入和写入都是顺序的,因此 WAL 缓冲区实际上是一个环形缓冲区 。缓冲区填满时性能会受到影响:在当前刷新完成之前,无法再插入WAL 。当synchronous_commit未关闭时,每个事务提交都会等待其 WAL 记录刷新到磁盘,从而减轻了wal缓冲区的影响。

如果一个事务更新大型记录或大量行,或者大量客户端并发执行更新事务,导致WAL缓冲区被填满,则它需要去刷磁盘而不能插入WAL,进而影响了wal的写入次数,则适当增加wal_buffers ,可能会提高性能。一般当单事务的数据修改量很大,产生的日志大于wal_buffers时,可适当调大该值。当有比较多的并发短事务时,可与参数commit_delay及commit_siblings连用,并适当调大该值。

但是在每次事务提交时,WAL 缓冲区的内容被写到磁盘,因此太大的值可能也不是个明智之举。 总的来说,数据库参数的调优并不能为了迎合某一阶段的SQL或者几条SQL。必须从数据库的整体去考量,从整体去得出一个值,而且不要去轻易频繁改动,否则不利于数据库的稳定性,而且也有可能会影响业务的连续性和用户体验。

曾有人测试过在一个系统进行调优,发现wal_buffers=64MB 的性能比 wal_buffers=16MB 翻了一番。但是也有的人在调优的时候,无论怎么搭配参数,性能都没有比原本默认的1/32的自动调整的方式高出10%。因此更多还是看实际的场景,SQL情况,以及并发等。对于这个参数,在具有大量并发的环境,可能有一定的优化空间,尝试稍微高一点的值,特别是如果你有频繁的检查点(主要指检查点之后防止在崩溃时页裂的full page write,这些全页写会非常快速地填满WAL 缓冲区)。

曾经看过一篇文章,评论里有人想根据在一段时间内写入 WAL 的数据字节数来做估算。

类似如下的方式,感兴趣的可以试试。

3、wal_buffers默认是怎么自动计算的

XLog Buffer的大小默认由参数wal_buffers决定,当这个参数设置为-1时候,PG会根据shared_bufferswal_segment_size参数自动计算而得到。

正常情况下,wal_buffers设置为-1的时候,wal_buffers的大小为shared_buffers的1/32,这个比例也是Gregory Smith之前给出的建议(Gregory Smith是国际PostgreSQL服务公司2ndQuadrant在美国的首席顾问),在代码里是由 NBuffers/32 来展现的,因此通过对应比例调整shared_buffers其实可以获得适当的优化,而其实更高的值有时也可以显著提高性能 ,主要还是看实际的使用场景。

-B NBuffers 是可以作为 Postgres 运行时候的命令行参数所设置的。

下边是这个参数的解释

-B nbuffers

Sets the number of shared buffers for use by the server processes. The default value of this parameter is chosen automatically by initdb. Specifying this option is equivalent to setting the shared_buffers configuration parameter.

nbuffers和shared_buffers是具备换算关系的,两者计算的字节数是一致的,以shared_buffers的单位为MB为例,具体的换算为 :

nbuffers=(shared_buffers*1024)/block_size

举个例子在进行换算的时候,比如10MB的shared_buffers,它占用的字节是shared_buffers*1024*1024,
而nbuffers占用的是 nbuffers*block_size*1024,所以我们想给shared_buffers设置为10MB,
通过计算nbuffers=(shared_buffers*1024)/block_size=1280,我们通过如下启动postrges的时候
指定-B来进行检验。最终的结果和我们的换算是一致的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DFS学习

一、DFS 1、简介 最初听到DFS还以为是深度优先遍历,实际上是分布式文件存储服务(Distributed file system)。 FastDFS是一套分布式文件存储服务,Titans将FastDFS提供的接口进行了封装,屏蔽了一些无需关注的操作细节,让用户可以更…

Java基础:Lambda表达式

1. 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么…

《Fluent Python》笔记 | 函数对象和装饰器

在Python中函数是对象,本质是function类的实例。同样函数对象也是“一等对象”,即满足以下条件: 在运行时创建能赋值给变量或数据结构中的元素能作为参数传给函数能作为函数的返回结果 函数对象的__doc__属性用于生成对象的帮助文本。 接受…

【避坑指南】快准狠!一键采购电子元器件(文末优惠券)

在采购元器件的过程中,经常会出现一些或这或那的情况,比如遇到假货问题、不具备专业知识、工作经验不够丰富、采购型号错误等等,因此采购下单如赌注,每个订单都下得心惊肉跳。 那么有哪些坑是可以避开的,又有什么方法可…

AI大模型加持,生成式搜索来了!

梦晨 发自 凹非寺量子位 | 公众号 QbitAI最近有两件事,让搜索引擎重回聚光灯下。百度发布“文心百中”,用AI大模型技术驱动的产业级搜索系统。构建企业内部搜索引擎的人力成本减少90%以上,同时只需要极低数据。几乎同一时间,OpenA…

算法---DFS和BFS

一 : 什么是DFS和BFS? 转载自 : 什么是DFS和BFS? 简介: 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序&#xf…

软考高级信息系统项目管理师如何备考?

从以下两个方面: 1.首先分析一下高项考试的各个科目; 2.如何备考高项? 高项考试有三个科目: 综合知识,案例分析,和论文。 一、综合知识 信息系统项目管理师上午综合知识科目范围广,知识点非…

【差分进化算法】基于适应度-距离-平衡的自适应引导差分进化 (FDB-AGDE) 算法附matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

java工作流开源框架可以提高工作效率吗?

要想回答这个问题,就需要了解什么是java工作流开源框架,以及java工作流开源框架的主要特点是什么。随着大数据时代的拓展发展,低代码开发平台已经在数字化管理时代中深受欢迎,是做好数据管理和提升企业数字化发展步伐的重要工具。…

医疗机构 IT 管理员保护患者数据和隐私的 3 项必做之事

自疫情开始以来,医疗机构的信息存储与管理正面临着巨大的考验。患者的健康史,包括所有治疗、程序、处方、实验室测试和扫描报告,都以电子健康记录 (EHR) 的形式存储。尽管 EHR 更能提高患者病例的准确性,并帮助医生跟踪患者的医疗…

网络三层交换机部署实验

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿…

排查cpu飚高问题-两种方案

cpu 飚高原因 频繁创建线程 线程内进行频繁计算 模拟代码 SpringBootApplicationEnableSchedulingpublic class CrawlBigDataApplication {public static void main(String[] args) { /*19*/ SpringApplication.run(CrawlBigDataApplication.class, (String[])args)…

【并发编程】Atomic类

一、介绍 在java.util.concurrent.atomic包下atomic一般指原子操作类,主要分为四种类型的原子更新类:原子更新基本类型、原子更新数组类型、原子更新引用和原子更新属性。 二、简单使用 1.AtomicInteger 通过synchronized关键字来保证原子性&#xf…

社交平台数据提取:Social Phone Extractor

Social Phone Extractor是一个功能强大且创新的程序,能够搜索和扫描在 Google / Bing / Yahoo 中索引并与最重要的社交网络(如 Linkedin、Facebook、Twitter 和 Instagram)相关的个人资料、帖子和文章的页面,然后捕获和推断&#…

ChatGPT介绍世界杯历史与编写足球游戏python程序

ChatGPT聊天机器人最近非常流行,是由OpenAI于本月发布的。花了一点时间注册了一个账号,如有需要帮助注册的可以随时与我交流。注册过程相对有一些复杂。 除了常规的聊天对话功能之外,ChatGPT聊天机器具备强大的文本生成能力,例如博…

【Android】Broadcast广播的使用

一、广播机制概述 通常情况下在学校的每个教室都会装有一个喇叭,这些喇叭是接入到学校广播室的。如果有重要通知,会发送一条广播来告知全校师生。为了便于发送和接收系统级别的消息通知,Android系统也引入了一套类似广播的消息机制。 Android…

股票撤单委托接口是如何操作的?

在交易的过程中&#xff0c;要先通过股票撤单委托接口获取委托单列表的数据&#xff0c;才可以进行撤单的操作&#xff0c;部分的数据会作为参数传递给撤单函数&#xff0c;下面来具体看看股票撤单委托接口是如何操作的&#xff1f; std::cout << " 撤单委托 \n&qu…

025_SSS_BeLFusion: Latent Diffusion for Behavior-Driven Human Motion Prediction

BeLFusion: Latent Diffusion for Behavior-Driven Human Motion Prediction 本文关注的问题是human motion prediction&#xff08;HMP&#xff09;&#xff0c;也就是在给定观测到的人体运动的前提下&#xff0c;预测人体的后续运动。本文的思路是&#xff0c;将人的behavio…

Linux文件服务NFS共享存储服务

作者简介&#xff1a;一名99年软件运维应届毕业生&#xff0c;正在自学云计算课程。宣言&#xff1a;人生就是B&#xff08;birth&#xff09;和D&#xff08;death&#xff09;之间的C&#xff08;choise&#xff09;&#xff0c;做好每一个选择。创作不易&#xff0c;动动小手…

高视医疗在港交所上市:IPO首日跌破发行价,高铁塔为控股股东

12月12日&#xff0c;高视医疗&#xff08;HK:02407&#xff09;在港交所上市。本次上市&#xff0c;高视医疗的发行价确定为每股发售股份51.40港元。据此计算&#xff0c;高视医疗预计募资约6.72亿港元。而招股书则显示&#xff0c;该公司预计募资净额约为2.83亿港元&#xff…