数据库修仙炼气篇三——postgresql进程之BgWriter

gaussdb 数据库参数说明【内存、磁盘空间、内核资源、后台写进程、异步IO】【03】 1. 内存 注意: 这些参数只能在数据库服务重新启动后生效。 shared_buffers 参数说明:设置GaussDB使用的共享内存大小。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。需要重新设置共享内存和信号灯。 设置原则如下: 服务器内存小于1GB时,建议设置shared_buffers占用内存比例小于25%,这样可以留下更多的内存空间给操作系统调用。 服务器内存大于1GB小于4GB时,建议设置shared_buffers值为系统内存的25%。 服务器内存大于4G 阅读详情

BgWriter

Bgwriter是一个Background Writer进程的简称,Bgwriter会定时将缓存中一些已经更改的数据(脏缓冲区)写入到磁盘。

BgWriter是postmaster通过fork创建的子进程。

BgWriter配置参数

  • bgwriter_delay

    启动时间间隔。

  • bgwriter_lru_maxpages

    最大刷新页数。

  • bgwriter_lru_multiplier

    乘数。

BgWriter从后向前扫描缓冲区的LRU链表写出最多bgwriter_lru_multiplier*N个脏页,并且不超过bgwriter_lru_maxpages。其中N是指最近两次BgWriter执行缓冲区清理期间系统新申请的缓冲页数。

源码分析

启动

  • 主进程fork子进程
main
PostmasterMain
StartChildProcess
fork_process
AuxiliaryProcessMain
BackgroundWriterMain
  • 子进程流程

    注册信号
    分配内存上下文
    BackgroundWriterMain
    GetCurrentTimestamp
    AllocSetContextCreate
    MemoryContextSwitchTo
    WritebackContextInit
    sigsetjmp
    loop
    处理信号包括退出BgWriter进程
    处理磁盘请求
    loop
    ResetLatch
    HandleMainLoopInterrupts
    BgBufferSync
    pgstat_report_bgwriter
    FirstCallSinceLastCheckpoint
    WaitLatch

    sigsetjmp会保存目前堆栈环境,然后将目前的地址作一个记号。而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。 返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。

    写文件

    写xlog文件
    写数据文件
    BgBufferSync
    SyncOneBuffer
    FlushBuffer
    XLogFlush
    XLogWrite
    XLogFileInit
    XLogFileOpen
    pg_pwrite
    smgropen
    smgrwrite
PostgreSQL源码分析——bgwriter 函数中实现的,让我们看一下这个函数。我们前面讲过,一条插入语句的执行过程,先在Buffer中找到空闲页,在页中插入元组,暂不刷盘,而且先构造WAL日志,将WAL日志刷盘,再由后台进程(bgwriter)刷盘。答案是肯定不行,即使bgwriter不进行刷盘,缓冲区也会进行页淘汰,缓冲区大小是有限的,当缓冲区满了时,又需要从磁盘中读数据页到缓冲区中,就必须将缓冲区中的部分页进行淘汰,目前的算法是时钟扫描算法,如果选择淘汰的页是脏页,则需要将脏页进行刷盘,这会导致查询或者更新需要更长的时间,自然性能降低了。 阅读详情

相关推荐

【车辆仿真】从0开始建立dSPACE RT Simulink工程:输出模拟电平

0基础建议先看下前面的博文,补充基础知识。原来的博文太长太复杂,后续我会逐步梳理改进,去除操作层面的内容,仅关注知识层面,提升系列博文的系统性。【工程环境信息】:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):SCALEXIO RTPC板卡:DS2680。

winnizap的博客 2055

【PostgreSQL的“double buffers“刷脏机制和参数】

PostgreSQL数据库使用双缓存写数据,shared_buffer + OS page cache,下图是PG与OS内存交互的过程 ,在PostgreSQL中,shared_buffers所代表的内存区域可以看成是一个以8KB的block为单位的数组,即最小的分配单位是8KB。这正好是一个page的大小,每个page以page内部的元数据(Page Header)互相区分。

小怪兽的博客 2240

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1609

PostgreSQL的BgWriter进程

在PostgreSQL中,BgWriter(Background Writer)是一个后台进程,负责将共享缓冲区中的脏页(即被修改过的数据页)写回到磁盘。BgWriter通过定期将脏页写入磁盘,减少了检查点时需要处理的脏页数量,从而降低了检查点过程中的I/O负载。这样可以提高数据库的整体性能,特别是在高并发写入的环境中。这些参数可以根据具体的工作负载和性能需求进行调整,以优化BgWriter的行为和数据库的整体性能。参数用于控制BgWriter在每个轮次中刷新的脏页数与上次轮次中刷新的脏页数的比例。

文牧之的博客 1009

基于QEMU的openEuler aarch64虚拟机快速部署与漏洞验证指南

本文提供了一份基于QEMU在个人电脑上快速部署openEuler aarch64虚拟机的详细指南。内容涵盖从软件准备、目录规划、QEMU安装、虚拟磁盘创建到系统安装与SSH配置的全过程,并以CVE-2024-1086内核漏洞为例,演示了如何在该虚拟环境中进行安全漏洞的验证与补丁测试,为安全研究和运维测试提供了一个低成本、高效率的ARM架构沙箱环境。

earth的博客 439

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

PostgreSQL之BgWriter

最近搞了一个公众号PostgreSQL运维技术,欢迎来踩~ 悄悄放一张: PostgreSQL运维技术 1、bgwriter是什么? Bgwriter是一个Background Writer进程的简称。 Bgwriter会将缓存中一些已经更改的数据(脏缓冲区)写入到磁盘。 之前我在checkpoint的文章里介绍过,checkpoint也是会将缓存中的脏数据写入到磁盘。 2、那么checkpoint与Bgwriter的区别是什么? checkpoint是以特定的时间...

深海微澜 2130

别再折腾SNAP了!ENVI 5.6.0 直接拖拽打开Sentinel-2 L2A数据的正确姿势

本文详细介绍了ENVI 5.6.0直接处理Sentinel-2 L2A数据的高效方法,无需通过SNAP进行繁琐的重采样预处理。通过直接拖拽XML文件,用户可以快速加载不同分辨率的波段数据,显著提升工作效率。文章还对比了直接打开与SNAP重采样流程的优劣,并提供了常见问题解决方案和高级应用技巧。

weixin_30296405的博客 635

数据库修仙炼气篇八——postgresql之IO调优

检查点是数据库的关键行为,同时也是IO敏感的;其保证了数据库的一致性状态,定期执行检查点是很重要的,确保数据变化持久保存到磁盘中并且数据库的状态是一致的。不当的检查点配置会导致IO性能问题。我们需要关注检查点的配置,确保没有任何IO的尖刺(这同样也取决于磁盘性能的好坏,以及数据文件的组织)。统自动执行checkpoint之间的最大时间间隔。系统默认值是5分钟,这个值可以在压测过程中调大,尽量避免执行checkpoint争抢IO。

growdu的网络博客 1744

【经验&技巧】IBIS AMI模型眼图仿真问题探讨

在ADS的仿真环境中,不论发送和接收的AMI模型是否为true或者false,都可以将通道仿真设置为统计模式,但是,如果有一方的Init函数为false,在统计模式下,处于false状态的模型将不能执行其自带的后处理功能,如下图所示,左边的统计模式和右边的逐比特模式眼图存在明显的差异,原因在于,接收端的init函数为false导致在统计模式中不能对眼图进行DFE处理,换言之,此时统计模式下的眼图就是未经任何处理的“生图”。

一只豌豆象的博客 1767

【华为OD机考真题】- 构成的正方形数量(B卷-100分)(Java版)

🔔本文收录于「最新最全华为OD机试真题(Java版)」专栏,手把手带你零基础教学华为OD机试。本题集提供最优题解思路,解题步骤,代码解析,复杂度分析及最优题解源码等,支持多语言题解,助你轻松拿捏OD机考,一举上岸!安利大家关注&&收藏&&订阅!题库正在疯狂收录中,up!up!up!! 🚫提醒:拒绝一切代考/替考,违法必究!专栏所写题库均精心搜集于互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验所撰,欢迎订阅。    💗订阅福利:一次订阅,可永久免费阅读,提供在线答疑解惑,后续题库更新

**My Coding Family** 1349

OpenGauss线程管理-数据页写线程(2)-bgwriter

bgwriter线程(BgWriter)主要负责对共享缓冲区的脏页数据进行下盘操作(即写入磁盘),目的是让数据库线程在进行用户查询时可以很少或者几乎不等待写动作的发生(写动作由后端写线程完成)。

qq_61101109的博客 818

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PostgreSQL(三)实例结构与后台进程

WAL数据(也称为XLOG记录)是Postgresql中的事务日志;在这个过程中,共享缓冲池上的脏页会逐渐定期写入永久存储器(如HDD、SSD)。4、超时(心跳机制);提交日志(CLOG)为并发控制(CC)机制保存所有事务的状态(例如,正在进行、已提交、已中止)。与用户进程一一对应,接收用户进程发来的请求,并将请求发送给后台进程(pgserver等)处理;后端进程,由postgres服务器进程启动,并处理一个连接的客户端发出的所有查询;各后台进程执行用于数据库管理的每个特性的进程(如清空、检査点进程)

shmily_coco的博客 1235

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

PostgreSQL启动过程中的那些事十八:bgwriter进程一

话说main()->PostmasterMain()->StartupDataBase(),fork了启动进程调用,调用StartupXLOG方法,启动XLOG、验证数据库一致性、根据情况做数据库恢复和创建检查点,然后启动进程退出。Postmaster进程响应启动进程退出信号,启动了后台写进程、WAL日志写进程、AUTOVACUUM进程、归档进程、统计进程这些辅助进程。 1 ...

数据库天地 1154

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

后台写入进程(Background Writer)

功能:将共享内存中的内容基于算法周期性的写入磁盘。当启动子进程完成或者归档恢复启动的时候,bgwriter由postmaster主进程启动,之后一直运行,直到postmaster命令它终止。 如果太快:一个数据块可能会被修改很多次,太快的情况下,每修改一次都要写入磁盘中,是一个相当浪费资源和性能的过程。 如果太慢:如果有新的查询或者更新等操作需要用内存保存从磁盘中读取数据,而此时内存却没有足够

HighGO 1443

postgresql.conf bgwriter_lru_multiplier

baidu_24377669的博客 207

openGauss 资源消耗 : 后端写进程

但是这样还是增加了I/O的总净负荷,因为以前的检查点间隔里,一个重复弄脏的页面可能只会冲刷一次,而同一个间隔里,后端写进程可能会写好几次。在有足够多的干净的、可用的缓存区之前,后端写进程会一直写“脏”缓存区的(每次写的缓存区数目不会超过bgwriter_lru_maxpages的值)。设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier会减小后端写进程导致的额外I/O开销,但是服务器进程必须自己发出写操作,增加了对查询的响应时间。

weixin_53596073的博客 1086

PostgreSQL数据库参数调优实践

PostgreSQL数据库性能调优涉及多方面,包括基础了解双重缓冲区处理、数据库性能影响因素及查询优化器。主要参数调优实践涵盖shared_buffers、work_mem、effective_cache_size等,通过合理设置可显著提升性能。索引优化包括选择索引类型、创建复合索引及定期维护。硬件资源如CPU、内存和存储的升级也能大幅提升性能。实际案例显示,通过参数调优、索引优化和硬件评估,数据库查询响应时间缩短,QPS提升,资源利用率更均衡,维护操作时间缩短,整体性能显著提高。

一个老Java开发的自白 1799

Postgresql杂谈 02—Postgresql体系介绍

一、Postgresql的内存结构 所谓的内存结构,就是Postgresql在运行时的内存构成,即有多少个进程,每个进程的作用是什么。我们先来看一张PG服务器的运行时内存结构图: 接下来,我们分别介绍了Postgresql各个进程的作用。 1.1 主进程PostMaster postmaster进程是PG数据库最主要的管理进程,它的作用主要有两个: (1)可以启动和关闭数据库的实例。 /usr/pgsql-11/bin/post...

Hyman的博客 1500

postgresql.conf bgwriter_lru_maxpages

baidu_24377669的博客 223

PostgreSQL-数据库参数

postgresql数据库参数介绍

守墓人的博客:分析日常生活中的工具和一些学习内容 1727

PostgreSQL的checkpointer进程

bgwriter进程与checkpointer进程,虽然都会写出脏页,但是刷脏的目的、频率、控制参数等,都有不同

好儿郎~志在四方 1884

从源代码上理解 PostgreSQL 的 bgwriter_lru_maxpages

先看代码:src\backend\storage\buffer\bufmgr.c /* * BgBufferSync -- Write out some dirty buffers in the pool. * ...

weixin_34090643的博客 486

SQL|如何查看bgwriter和checkpoint的执行效率

如何查看postgresql bgwriter和checkpoint检查点执行情况的SQL以及分析建议

u011312513的博客 1054

对PostgreSQL 的 background writer 的初步理解

代码缩略如下: /* * Main entry point for bgwriter process * * This...

weixin_34406796的博客 190
上一篇: 数据库修仙炼气篇十一——postgresql 存储管理
下一篇: 数据库修仙炼气篇八——postgresql之IO调优
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值