数据库修仙炼气篇四——WalWriter

【PG基础知识】七 postgreSQL参数解释二 WRITE-AHEAD LOG部分 postgreSQL参数解释二 WRITE-AHEAD LOG部分 阅读详情

WalWriter

预写式日志WAL机制是对数据文件的修改必须是只能发生在这些修改已经记录到日志之后,即先写日志再写数据。

WalWriter进程负责定期从WAL缓冲区写出日志,并确定写出日志的起点和终点来调用XlogWriter将日志写入到磁盘。

参数配置

  • wal_level

    控制wal存储的级别。wal_level确定有多少信息被写入到WAL。默认值是replica,它添加了WAL归档信息,包括只读服务器(流复制)所需的信息。还可以将其设置为minimal,即只写入从崩溃或立即关闭中恢复所需的信息。设置为Logical允许在逻辑解码场景中完成WAL流。

  • fsync

    这个参数直接控制日志是否先写到磁盘。默认值为ON(先写),这意味着系统应该通过发出wal_sync_method设置的fsync指令,来确保更改确实被刷新到磁盘。虽然关闭fsync通常可以提高性能,但在电源故障或系统崩溃时,这会导致不可恢复的数据损坏。因此,只有当您可以轻松地从外部数据重新创建整个数据库时,才建议关闭fsync。

  • synchronous_commit

    此参数用于配置系统是否等待WAL完全完成后再将状态信息返回给用户事务。默认值为ON,表示必须等待WAL完成后才能返回事务状态信息;配置OFF可以更快地反馈事务状态。

  • wal_sync_method

    这个参数控制WAL写入磁盘的fsync方法。默认值是fsync。可用的值包括open_datasync、fdatasync、fsync_writethrough、fsync、以及open_sync.open_datasync和open_sync。

  • full_page_writes

    指示是否将整个页面写入WAL。

  • wal_buffers

    指示了用于存储WAL数据的内存空间量。系统默认值为64K。此参数还受wal_writer_delay和commit_delay这两个参数的影响。

  • wal_writer_delay

    WalWriter进程的写入间隔。默认值是200毫秒。如果时间过长,可能会导致WAL缓冲区内存不足;如果时间太短,会导致WAL不断写入,增加磁盘I/O负担。

  • wal_writer_flush_after

    当脏数据超过这个阈值时,它将被刷新到磁盘。

  • commit_delay

    指示在WAL buffer中存储已提交的数据的时间。默认值为0毫秒,表示没有延迟;

    当它被设置为非零值时,在事务提交后,事务将不会被立即写入到WAL中,但它仍然存储在WAL buffer中,等待WalWriter进程定期写入磁盘。

  • commit_siblings

    当事务发出提交请求时,如果数据库中的事务数量大于commit_sibling的值,事务将等待一段时间(commit_delay值);否则,事务将直接写入到WAL。系统默认值是5,这个参数还确定了commit_delay的有效性。

源码分析

启动

main
PostmasterMain
StartChildProcess
fork_process
AuxiliaryProcessMain
WalWriterMain

写文件

处理信号包括退出进程
loop
ResetLatch
HandleWalWriterInterruptss
XLogBackgroundFlush
WaitXLogInsertionsToFinish
XLogWrite
pgstat_report_wal
WaitLatch

WalWriter会根据WalWriterDelay时间进行循环,当WalWriterDelay时间到达后,再次执行XLogBackgroundFlush进行WAL日志写入。

int			WalWriterDelay = 200;
int			WalWriterFlushAfter = 128;


for (;;)
{
    if (XLogBackgroundFlush())
			left_till_hibernate = LOOPS_UNTIL_HIBERNATE;
	else if (left_till_hibernate > 0)
			left_till_hibernate--;
    if (left_till_hibernate > 0)
			cur_timeout = WalWriterDelay;	/* in ms */
	else
			cur_timeout = WalWriterDelay * HIBERNATE_FACTOR;

	(void) WaitLatch(MyLatch,
						 WL_LATCH_SET | WL_TIMEOUT | WL_EXIT_ON_PM_DEATH,
						 cur_timeout,
						 WAIT_EVENT_WAL_WRITER_MAIN);
}

reference

  1. https://www.modb.pro/db/28621
Hcaptcha验证码的‘免浏览器’破解思路:协议分析与N值算法逆向 本文深入解析Hcaptcha验证码的‘免浏览器’破解思路,通过协议分析与N值算法逆向,实现高效自动识别。文章详细拆解Hcaptcha的API交互流程,揭示关键参数`req`和`n`的生成机制,并提供轻量级实现方案,显著降低资源消耗,适用于大规模数据采集等场景。 阅读详情

相关推荐

别再只放按钮了!巧用微信小程序‘长按识别’功能,打造无缝加群体验

本文深入探讨了微信小程序'长按识别'功能在社群运营中的创新应用,通过简化加群流程至一步操作,显著提升用户转化率。文章详细解析了技术实现细节、UI/UX设计策略,并对比了与企业微信API的适用场景,为开发者提供打造无缝加群体验的完整解决方案。

weixin_42627853的博客 435

PostgreSQL启动过程中的那些事十九:walwriter进程一

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

数据库天地 1259

世界坐标系/相机坐标系/图像坐标系 转换

目录一、各坐标系简要介绍二、坐标系转换2.1 世界坐标系转为相机坐标系2.2 相机坐标系转为物理图像坐标系2.3 物理图像坐标系转为图像坐标系2.4 总结2.5 为什么要使用齐次坐标参考文献 一、各坐标系简要介绍 首先介绍数字图像处理领域中的图像坐标系,如上图左图所示,坐标系O_0为图像坐标系,其原点是在图像的左上角,每一个像素通过其所在位置的列数和行数索引 (u,v) 来表示。 另外需要建立图像坐标与物理单位的关系,而后才能将目标的真实世界坐标转换为图像坐标。即建立以物理单位表示的物理图像坐标系(有些文

流觞时光 1万+

pg中wal日志参数对提交和未提交事务的控制

脏数据(未提交)和脏页(已经被修改的页) 脏数据是指事务对缓冲池中行记录的修改,并且还没有提交。 注意脏数据和脏页是完全不同的两种概念,脏页指的是在缓冲池中已经被修改的页,但是还没有刷新到磁盘中,即数据库实例内存中的页和磁盘中的页的数据不一致。脏页的读取是非常正常的,脏页是数据库实例内存和磁盘异步造成的,这并不影响数据的一致性,脏页最终会被刷新到磁盘中。 wal_buffers:控制wal buffer的大小,默认值为shared_buffers大小的1/32。 wal_writer_delay:控

weixin_43084715的博客 1051

UE5.3像素流送Docker化部署:从Linux服务器搭建到云端实时渲染

本文详细介绍了在Linux服务器上使用Docker容器化部署UE5.3像素流送服务的完整流程。通过将虚幻引擎运行时、信令服务器和TURN服务打包为标准化镜像,利用Docker Compose进行编排,实现了云端实时渲染应用的快速部署、环境一致与弹性扩展,有效解决了传统部署中的环境依赖与运维难题。

k0l1m2n3o的博客 200

从零到一:用MSC Nastran Patran搞定悬臂翼颤振分析(附完整模型文件)

本文详细介绍了使用MSC Nastran和Patran进行悬臂翼颤振分析的完整流程,从几何建模、网格划分到模态分析和颤振求解。通过具体案例讲解关键参数设置和操作技巧,帮助工程师掌握气动弹性分析的核心方法,并附赠完整模型文件供实践参考。

weixin_42563415的博客 442

PostgreSQL的walwriter进程

在PostgreSQL中,walwriter进程(WAL Writer)是一个专门用于管理WAL(Write-Ahead Logging,预写日志)的后台进程,其主要职责是将WAL缓冲区中的数据写入磁盘上的WAL文件。walwriter。

文牧之的博客 1079

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9852

PostgreSQL配置文件--WAL

3 WAL WRITE AHEAD LOG 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的后恢复到一个一致的状态。 虽然关闭,可以提升数据库性能,但无法保证数据库崩溃后数据一致性。 通常情况下需要打开这个参数,除非能经受掉电或硬件故障带来的数据丢失,否则不要关闭。 ...

ddk4044的博客 580

Word公式一键转MathType保姆级教程(附omml2mml.xsl报错终极解决方案)

本文提供Word公式一键转MathType的保姆级教程,重点解决常见的omml2mml.xsl报错问题。通过详细分析报错原因、官方解决方案实操步骤及转换后格式优化技巧,帮助用户高效完成公式转换,适用于科研论文和商业文档编辑。

weixin_30082367的博客 558

分布式训练中All-Reduce、All-Gather、Reduce-Scatter原理

Reduce-Scatter = 先对所有进程的数据做 Reduce(如 sum / mean),再把结果“切分”分发给各进程。(是 Reduce + Scatter 的融合操作。

comli_cn的博客 341

PostgreSQL WAL Writer 与 Archiver 进程对比

在PostgreSQL中,walwriter和archiver进程是两个重要的后台进程,它们负责管理WAL(Write-Ahead Logging,预写日志)文件,但它们的职责和功能有所区别。理解这两个进程的不同点对于数据库管理员来说至关重要,因为这影响到数据库的性能和数据持久性。walwriter。

文牧之的博客 874

构建基于知识图谱的金融监管合规系统

金融行业是一个高度监管的领域,金融机构需要遵守众多复杂的法规和政策。传统的金融监管合规方式往往依赖于人工审查和简单的规则引擎,效率低下且容易出错。构建基于知识图谱的金融监管合规系统的目的在于利用知识图谱强大的知识表示和推理能力,实现对金融业务数据的自动化分析和合规检查,提高监管合规的效率和准确性。本系统的范围涵盖了金融机构的各类业务,如银行业务、证券业务、保险业务等。

AI天才研究院 1168

深入学习openGauss主备

本文档介绍了openGauss的主备架构、如何修改事务提交方式(同步、异步)、解释了主备日志复制的相关GUC参数、以及对openGauss3.0新添加的CM工具进行了介绍。本文档的内容主要由官方文档整理而来。...

G1872093490的博客 3065

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OpenGauss线程管理-日志写线程-WALWriter

主要功能:周期性的把日志缓冲区的内容同步到磁盘上。

qq_61101109的博客 855

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

PostgreSQL(十一)WAL日志管理

PG的WAL(Write Ahead Log)日志,意为 预写式日志,特点是先记后做。例如:假设发生一个update事务,数据库的操作步骤:(1)将update事务转化为特定格式,形成日志条目,记录至内存中的wal buffer;(2)从磁盘的数据文件中读取需要update的数据至内存中的buffer cache,然后进行update,得到脏块;(3)commit这个事务(或满足其他触发条件),wal writer进程将wal buffer中日志条目记录至磁盘的wal文件中;

shmily_coco的博客 3950

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【PostgreSQL系列】PostgreSQL WAL (Write-Ahead Log) 参数详解

WAL(预写日志)是 PostgreSQL 的核心机制,用于保证数据一致性和崩溃恢复。🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!生产环境必须保持 on。

优快云站内信: https://i.youkuaiyun.com/#/msg/chat/qyj19920704 960

MySQL中level的用法_postgresql中wal_level的三个参数用法说明

wal_level中有三个主要的参数:minimal、archive和hot_standby1、minimal是默认的值,它仅写入崩溃或者突发关机时所需要的信息(不建议使用)。2、archive是增加wal归档所需的日志(最常用)。3、hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般实在流复制的时候使用到。补充:postgresql WAL相关参数配置文件# - Setti...

weixin_35796591的博客 1391

Postgresql关于wal日志总结,一文搞清楚它的所有概念和相关操作

官方文档 https://www.postgresql.org/docs/11/wal-intro.html https://www.postgresql.org/docs/11/wal-configuration.html https://www.postgresql.org/docs/11/runtime-config-wal.html https://www.postgresql.org/docs/11/runtime-config-preset.html https://www.postgresql

lusklusklusk的博客 1万+

postgresql.conf wal_writer_delay

baidu_24377669的博客 258

PostgreSQL数据库WAL总结

简单地说,WAL的核心概念是,对数据文件(表和索引所在的地方)的更改必须在写入了日志文件后这些更改之后才可以写入数据文件,也就是说,描述更改的日志记录被刷新到永久存储之后才可以写数据文件。使用WAL可以显著减少磁盘写操作的数量,因为只需要将日志文件刷新到磁盘以确保提交事务,而不是事务更改的每个数据文件。日志文件是按顺序写入的,因此同步日志的成本要比刷新数据页的成本低得多。备注:数据库将脏数据刷到数据文件上,这个动作是随机I/O,性能比写日志的顺序I/O差太多总结

qq_58883939的博客 4105

预写日志——WAL

预写日志——WAL

style_boy的博客 1620

腾讯云TDSQL PostgreSQL WAL日志清理

作者崔鹏,曾获得中国PostgreSQL数据库管理高级工程师(PGCM),是PostgreSQL官方认证讲师,Mysql 5.7/8.0 OCP,Oracle 11g OCM。 WAL是Write Ahead Log的简写,10版本以后在$PGDATA/pg_wal目录中 10之前的版本在$PGDATA/pg_xlog. wal相关参数 #wal_compression = off 如果当全页写成为io瓶颈时,可以设置为on #wal_log_hints = off 如果使用pg_rewind,需要设置为o

weixin_43872058的博客 720

postgres相关参数学习3(wal)

WAL相关参数: postgres=# select name,setting from pg_settings where name like 'wal%'; name | setting ------------------------------+----------- wal_block_size | 8192 wal_buffers | 12800 wal_compre.

乡下人 790

PostgreSQL postgresql 读书会 一期 5 优化数据库的参数们

313页起关于硬盘的settings这一段写的比较少,并且写的也不是很清晰,这里进行扩展(扩展的字体为粗体)在文中提到了fsync setting forces each transac...

sql server的专栏 220

WAL Write AheadLog

WAL

狼与自由 695
上一篇: 数据库修仙炼气篇八——postgresql之IO调优
下一篇: 数据库修仙炼气篇七——replication
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

我在数据库世界里修仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值