首页 > 其他分享 >23.pg_wal浅析01

23.pg_wal浅析01

时间:2024-04-27 09:02:08浏览次数:16  
标签:wal 01 checkpoint WAL 检查点 日志 浅析 size

1.PG_WAL?

  WAL是一套保证数据完整性的标准。简要地说,WAL中心概念是数据文件(这里涉及到表和索引)修改必须在这些动作被记录之后,即 描述这些修改操作的日志记录被刷到永久存储中。如果我们遵循这个过程,我们不需要在每次事务提交时刷数据页到磁盘,因我我们知道一旦发生崩溃,我们可以使用日志回复数据库,任何还没有被应用到数据页面的改变可以根据其日志记录重做(这是前滚恢复,也被称为REDO)

   因为WAL存储在数据库崩溃后的内容,日志文件系统不需要数据文件或者WAL文件的可靠存储。事实上,日志预写回降低性能,特别是日志文件会引起文件系统数据被刷到磁盘中 

  当数据库中数据发生变更时:
  change发生时:先要将变更后内容计入wal buffer中,再将变更后的数据写入data buffer;
  commit发生时:wal buffer中数据刷新到磁盘;
  checkpoint发生时:将所有data buffer刷新的磁盘。

  可以想象,如果没有wal日志,那么数据库中将会发生什么?
  首先,当我们在数据库中更新数据时,如果没有wal日志,那么每次更新都会将数据刷到磁盘上,并且这个动作是随机i/o,性能可想而知。并且没有wal日志,关系型数据库中事务的ACID如何保证呢?
  因此wal日志重要性可想而知。其中心思想就是:先写入日志文件,再写入数据。

  说到checkpoint,我们再来看看哪些情况会触发数据库的checkpoing:
  1.手动执行CHECKPOINT命令;
  2.执行需要检查点的命令(例如pg_start_backup 或pg_ctl stop|restart等等);
  3.达到检查点配置时间(checkpoint_timeout);
  4.max_wal_size已满。

  其中1和2两点都和数据库的配置无关,我们暂时先不看,这里先介绍下checkpoint_timeout和max_wal_size两个参数

 

2.参数

  • checkpoint_timeout:自动 WAL 检查点之间的最长时间,以秒计。合理的范围在 30 秒到 1 天之间。默认是 5 分钟(5min)。增加这个参数的值会增加崩溃恢复所需的时间。
  • max_wal_size:在自动 WAL检查点之间允许WAL 增长到的最大尺寸。这是一个软限制,在特殊的情况 下 WAL 尺寸可能会超过max_wal_size, 例如在重度负荷下、archive_command失败或者高的 wal_keep_segments设置。默认为 1 GB。增加这个参数可能导致崩溃恢复所需的时间变长
  • min_wal_size:按照max_wal_size的理解,反过来min_wal_size就是限制pg_wal目录的最小值,也就是限制最少的wal日志文件数量,在数据库空闲的时候,如果pg_wal目录大小低于min_wal_size,数据库将会重用wal日志文件而不是删除。
  • wal_segment_size:这个是默认的每个wal日志文件的大小(16M),该值可以在安装是指定
  • wal_keep_size(pg13中称wal_keep_segments):指定保存在pg_wal目录中的过去日志文件段的最小数量,以防备用服务器需要获取它们以进行流复制
  • checkpoint_completion_target:指定检查点完成的目标,作为检查点之间总时间的一部分。默认是 0.5。

  什么意思呢,假如我的checkpoint_timeout设置是30分钟,而wal生成了10G,那么设置成0.5就允许我在15分钟内完成checkpoint,调大这个值就可以降低checkpoint对性能的影响,但是万一数据库出现故障,那么这个值设置越大数据就越危险。

 

#wal_segment_size         --报告预写日志段的大小。默认值为 16MB
#wal_keep_segments        --指定保存在pg_wal目录中的过去日志文件段的最小数量,以防备用服务器需要获取它们以进行流复制。pg13改为wal_keep_segments 

#checkpoint_completion_target = 0.5   --指定检查点完成的目标,作为检查点之间总时间的一部分。默认值为 0.5 
#checkpoint_timeout=300                --自动 WAL 检查点之间的最长时间。如果指定此值没有单位,则以秒为单位。有效范围在 30 秒到 1 天之间。默认值为五分钟 ( 5min)。
#max_wal_size = 1GB    --最大不超过这个值 ,在自动检查点期间让 WAL 增长的最大大小。这是一个软限制;WAL 大小max_wal_size在特殊情况下可能会超出,例如重负载、失败archive_command或高wal_keep_segments设置。如果此值指定为不带单位,则以兆字节为单位。默认值为 1 GB。
#min_wal_size = 80MB   --最小保留这个值,只要 WAL 磁盘使用率低于此设置,旧的 WAL 文件总是在检查点被回收以供将来使用,而不是被删除。这可用于确保保留足够的 WAL 空间来处理 WAL 使用中的峰值,例如在运行大型批处理作业时。如果此值指定为不带单位,则以兆字节为单位。默认值为 80 MB。

 

 

 

 

 

参考:max_wal_size/min_wal_size参数理解和作用测试 - PostgreSQL数据库 - 晟数学苑 - 学习塑造未来 (sandata.com.cn)

标签:wal,01,checkpoint,WAL,检查点,日志,浅析,size
From: https://www.cnblogs.com/zmc60/p/18161247

相关文章

  • 014_用vim复制粘贴_保持双手正位
    [oeasy]python0014_用vim复制粘贴_保持双手正位继续运行......
  • UES-01-块级绑定
    var如果在函数内部使用var声明变量,无论在内部的哪个地方声明,都相当于在函数的第一行声明该变量。若在函数外部使用var声明,则相当于在源文件的第一行声明该变量。这种行为称为变量提升(hoisting)。块级声明let声明的变量和其他类C语言一样具有块级作用域,生命周期从声明......
  • 初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺高分!-012
    PDF格式公众号回复关键字:ZKYDT012原文1Richardfoundthebirdintheforest,didn’the?解析1Richard,found发现了,thebird这只鸟,intheforest在森林里,didn’the?不是吗理查德在森林里发现了这只鸟,不是吗?2Hesawastrangebirdinabush.他在灌木丛......
  • Day01 Web服务搭建&站库分离&路由访问
    常规的Web应用搭建:1.购买云服务器,购买域名2.云服务器去搭建中间件windowsserver安装web角色后默认可以直接通过域名打开网站首页3.下载并上传Web程序源码zblog源码官网可下载4.添加网站并绑定域名目录域名解析设置:二级域名ablog.whgojp.top解析到该服务器zblog程序......
  • [题解] [NOIP 2010] 饮水入城
    [题解][NOIP2010]饮水入城题目描述有一个\(n\timesm\)的矩阵,每一点的高度是\(h_{i,j}\)。矩阵的最下面一行是\(m\)个城市,现在要在第一行建水站为这些城市供水,水站建好后水可以从水站往别的点引水,只能从高处引向相邻的低处,如果一个城市存在可以给他引水的水站,则这个城......
  • Java并发01---JMM模型、Volatile、CAS操作、自旋锁、ABA问题
    @目录JMM(JavaMemoryModel)Volatile修饰CAS(CompareAndSwap)ABA问题JMM(JavaMemoryModel)首先要明确的是JMM与JVM内存结构不是同一个概念,记的时候不要记混。我们先来回顾一下JVM内存结构,其包括了堆、方法区、虚拟机栈、程序计数器、本地方法区,其中前二者为线程共享,后三者为线程......
  • 车用MCU,R7F701320EAFP、R7F701321EAFP、R7F701322EAFP、R7F701323EAFP微控制器功耗低,
    RH850/P1M——适用于底盘系统的汽车用微控制器简介RH850/P1M微控制器功耗低,闪存容量高达2MB,RAM容量高达128KB,具有增强型电机控制定时器、CAN接口、SENT和PSI5等传感器数字接口以及锁定CPU、ECC、BIST(内置自检)和ECM(错误控制模块)等安全功能,适用于底盘系统。此外,仅2......
  • 洛谷题单指南-动态规划2-P2679 [NOIP2015 提高组] 子串
    原题链接:https://www.luogu.com.cn/problem/P2679题意解读:在a中按顺序挑选k个子串,使得这些子串连在一起正好和b相等,求方案数。解题思路:这样的题目,无外乎两个思路:DFS暴搜(得部分分)、动态规划动态规划不好想,还是先暴搜吧!1、DFS暴搜搜索的思路就是:从a起始位置开始,一直找到跟b前......
  • 01. 计算机运行原理
    【二进制数据】全球所有人都习惯使用十进制数,也许是因为远古时期人类使用手势交流的原因,人类使用十个手指表示十个数据。中文使用一、二、三、四、五、六、七、八、九、十表示十个基础数字,并使用零表示没有任何数据,单个数字表示的数据范围是有限的,超过上限就使用多个数字的组合......
  • VS2017修改项目名称
    修改项目名称直接右击项目->重命名只是改了project的vcxproj文件中的ProjectName的值,而如果手动修改了项目文件夹的名称,就会造成解决方案按照其sln文件加载对应的项目时,找不到正确的项目路径,所以会加载失败。有了以上的描述,再来修改项目的名称就简单了,有以下几个步骤:1.右击项目-......