当前位置: 首页 > news >正文

PostgreSQL WAL 日志发展史 - pg7

文章目录

  • 一、pg7.1 开天辟地
    • 1、WAL_BUFFERS
      • 注意:
    • 2、FSYNC
    • 3、WAL_SYNC_METHOD
    • 4、COMMIT_DELAY && COMMIT_SIBLINGS
    • 5、WAL_DEBUG
    • 6、WAL_FILES
    • 7、CHECKPOINT_TIMEOUT
    • 8、CHECKPOINT_SEGMENT
  • 二、pg7.3 改变 wal 预生成方式
  • 三、pg7.4 增加便利性 warning
    • CHECKPOINT_WARNING

一、pg7.1 开天辟地

7.1 是 PostgreSQL 国际社区文档中提供详细资料的第一个版本,因为够完整也够简单,所以选择从 pg7.1 开始介绍
在这里插入图片描述
上图描述了 wal 日志的本职工作,PostgreSQL 在执行数据修改操作时,修改的数据在写入磁盘前要先将修改的内容写入 wal 日志,如此就可以不必时时地将共享缓存中的数据刷新到磁盘中,这样做的目的是以 wal 日志的顺序写入代替数据文件的随机写入来提升性能,如果数据库发生崩溃,可以从 wal 日志获取共享缓存中未写入磁盘的数据

1、WAL_BUFFERS

wal 日志缓冲区大小,用于减少磁盘 I/O 次数,提升性能

注意:

  1. COMMIT 操作会触发一次对 wal_buffers 的强制刷盘,为了保证 ACID 中的 “D”(Durability,持久性),确保数据不会因系统崩溃而丢失,而且这还是一个同步操作,会短暂阻塞事务直到 I/O 完成
  2. XLOG_BLCKSZ(wal 日志基本单位)不是一个 GUC 参数,一般是编译数据库时通过 configure 命令指定,pg11(包含)之后,可以通过 initdb 命令指定

2、FSYNC

确保 wal 日志,或者其他数据文件安全写入磁盘

3、WAL_SYNC_METHOD

这个参数是对fsync参数的补全,它指定了保证数据写入持久化存储的方法。

4、COMMIT_DELAY && COMMIT_SIBLINGS

前面提到刷写wal缓存的策略注,在这里描述一下

①在wal缓存写满时,会触发刷写wal缓存。

②在事务提交时会触发刷写wal缓存。在事务提交刷写缓存时,PostgreSQL又做了一点小动作,来提升性能:commit_delay指事务提交之后允许wal缓存延迟刷写的时间,这个延迟的目的是想等一下并行执行的兄弟事务,等兄弟事务完成提交后,一起将wal日志刷写入磁盘,如果兄弟事务超过这个commit_delay时间还未提交,那么当前进程就完成wal刷写。commit_siblings意义是当前事务做这个等待的条件,如果并行执行的兄弟事务小于commit_siblings,那当前事务就不做等待了。

注:在8.3版本增加了walwriter进程可以定时刷写wal日志,这个策略也因此改变

可能文字描述后比较难懂,举个例子:小明(事务)放学(提交)要打车(刷写)回家,他发现有顺路的其他班级的同学(兄弟事务)没有放学,就想等几个人一起平摊打车的费用。发现在上课的同学太少了(commit_siblings),就想等这么长的时间省一点点钱不划算,就自己走了(刷写磁盘);发现还在上课的同学很多,就想等一段时间吧(commit_delay),等到这个时间长度带上下课的同学就走。

5、WAL_DEBUG

开启wal debug的参数,可以不用关注它。

PostgreSQL通常使用checkpoint进程来清理一些废弃的文件,对于wal文件来说,会在checkpoint时生成一些备用的wal文件或者清理旧的不使用的wal文件,且看相关配置[GUC2]。注意此处描述的为7.1版本的情况,一些参数已经不适用于最新的PostgreSQL版本。

6、WAL_FILES

在7.1版本的PostgreSQL中,wal_files参数如果大于0,在做检查点时会预先创建wal_files数量的wal段备用,wal_files参数等于0时,会一个一个的创建wal段。这个参数在7.3版本就删除了,换为另一种wal日志的预生成方法。

7、CHECKPOINT_TIMEOUT

PostgreSQL执行一次checkpoint的时间间隔,此处这个参数跟wal关系没有那么大,因为这个参数预下面的checkpoint_segment有相似的功用,他们都是触发checopint的时机,所以也写到了这里。

8、CHECKPOINT_SEGMENT

PostgreSQL执行一次checkpoint的wal段间隔,从上一次checkpoint开始,PostgreSQL在写了一定数量的wal段后,会再次触发checkpoint。

二、pg7.3 改变 wal 预生成方式

此版本在 7.1 版本基础上做了微小的改变,主要是改变了预生成 wal 段的方法

在checkpoint时不再预生成wal段,改为了新的策略维护wal生成目录中的wal段:

  1. wal段的数量原则上不超过2 * checkpoint_segments + 1
  2. 一个流量高峰可能会导致backend极速生成wal日志,可能会将wal段数量增加到2 * checkpoint_segments + 1以上
  3. 做检查点时,如果wal段数量超限,会将超限的wal段删除, 如果wal段数量不超限,会将旧的wal段改名为将来的wal段。

因此 WAL_FILES 参数不再使用,在这个版本中被移除了。当然这个 wal 段的管理方式在 pg9.5 又有所变化

三、pg7.4 增加便利性 warning

此版本没有功能性的变化,只是增加了一个 warning 参数 checkpoint_warning

CHECKPOINT_WARNING

如果两次因为CHECKPOINT_SEGMENT参数产生的checkpoint的时间间隔小于checkpoint_warning值,会报一个warning,提醒用户增加CHECKPOINT_SEGMENT的数值

http://www.dtcms.com/a/423450.html

相关文章:

  • 商丘企业网站建设团队网站设计的内容以及步骤
  • 网站域名所有人wordpress 子域名
  • ListenHub:AI播客平台,一句话生成播客
  • 知名的媒体发稿代理有哪些
  • PyTorch nn.Linear 终极详解:从零理解线性层的一切(含可视化+完整代码)
  • 大型企业级金融信贷平台需求报告
  • 【算法】小点:List.remove
  • 文件扩展名.js .jsx .ts .tsx区别(JavaScript扩展名、React扩展名、TypeScript扩展名)
  • MySQL 在金融系统中的应用:强一致性与高可用架构实战
  • 销售型网站营销目标查网址是否安全
  • 媒体发稿平台如何选
  • 靠谱的综合门户媒体发稿如何选
  • 学习:uniapp全栈微信小程序vue3后台(29)
  • 装修设计网站排名新浪短网址链接
  • kali 01——安装及简要介绍
  • 宁夏政务网站建设标准wordpress是瀑布流吗
  • 烟台 网站建设中国广告在国外投放案例
  • OpenAI秘密测试ChatGPT安全路由,情感对话触发GPT-5严格审查
  • 赋能制造新质生产力:制造业专用低代码平台选型指南(2025)
  • 智慧工地系统:建筑行业数字化转型的核心趋势,集成云计算、物联网、大数据等技术,构建覆盖施工全周期的智能化管理体系。
  • 做一个网站需要多少人权威的手机网站制作
  • Flink 有状态与时间敏感流处理从 Concepts 到 API 实战
  • UNIX下C语言编程与实践11-UNIX 动态库显式调用:dlopen、dlsym、dlerror、dlclose 函数的使用与实例
  • 【形宙数字】Pupil Neon VR|AR|XR虚拟现实眼动追踪系统-眼动仪-视线追踪-生理心理学-虚拟模拟
  • JupyterLab+PyTorch:LoRA+4-bit量化+SFT微调Llama 4医疗推理应用|附代码数据
  • python-格式化输入输出
  • 【Dogfight论文复现】无人机视频中检测无人机的目标检测模型
  • 北京矿建建设集团有限公司 网站谷歌seo服务公司
  • 食品行业数字化转型实战:工艺优化解决方案中的四大核心模块详解
  • 【文件上传漏洞】绕过验证上