PostgreSQL 数据库归档最近被问及的问题问题 与 4 毋 处世学

9c2eb50c91e2d3aba4064337e38168b2.png

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1790人左右 1 + 2 + 3 + 4 +5) 4群(300+ 到350将关闭自由申请),另欢迎 OpenGauss 的技术人员加入。

在开始文章前,本人应邀参加12月28日的一场分享活动,这里做做广告。

0c631832641a9a9dd60077f92729d854.png

还是老规矩,技术加生活,先说技术,后说生活的感悟和人生的学习。

在PostgreSQL 中很少被提及的一个问题,归档,而这里经常有人问这个问题,所以需要写一期来说说关于ARCHIVE 的问题。

首先我们需要提出几个问题,

1 为什么要归档,PG中归档了什么

2  什么时间进行归档,归档的原理与频率

3  要怎么在PG中进行归档,归档的方式

在开始研究我们的archive 的问题时我们需要先把archive的知识拉平

首先在pg_wal目录中的日志本身,至少会维护一个当前正在写入的文件,日志中记录了操作中对于数据库的全部更改项,这里需要注意在 archive关闭的状态下,他会将不再使用WAL文件重命名来和重新利用数据库

问题1 ,在PG中WAL日志作为数据库中最核心的日志与保障数据库数据安全的方法,在运行中会产生大量的WAL日志,这里其中包含FULLPAGE  导致的WAL 过大的问题,一般来讲我们认为日志本身的内容占据WAL的数据的内容的30%,而FULL PAGE 的部分占据70%左右的数据,所以PG的WAL归档是一个必须的操作,即时的解决你的磁盘空间重复利用的问题。

在归档中,有一个问题,关于如何触发 archive,这里主要有几点

1   当前的 wal 被写满,并且产生了新的wal文件

2  手动通过pg_switch_wal 来进行数据库的产生新的PG_WAL 文件并且在产生新的PG_WAL 文件后,会对老的WAL 文件产生归档的触发条件。

3  自动设置超时时间archive_timeout 参数并reload 后,到时间会强行进行产生 pg_wal的工作,并且对数据的wal 进行归档。

所有产生数据归档的触发点很多,总结一点产生wal  文件的时候就会触发归档命令。

这里还有一些细节

1 归档如果失败,则归档会持续的被触发,错误日志中会记录归档失败的信息。

2  归档中因为某些原因可以设置, wal_keep_size来解决一些关于日志被归档后,但日志在物理复制中还未被应用而导致的复制中断的问题。

postgres=# show wal_keep_size;

 wal_keep_size 

---------------

 0

(1 row)

3 基于归档的的方式方法,postgresql给出的是一个开放性的方案,在这样的方案中,数据库并没有设定具体怎么去归档,这里比如有传统的方案,S3方案,或者脚本的方案等等,所以归档这个事情是需要自行进行设计和根据自己的情况来进行安排的。

86cbdbbeec4656d6b51675f5a854cb8b.png

4  在归档中,会出现一些问题,比如数据库恢复后,在进行归档发现归档文件中已经有这个文件了,那么归档必然失败,所以需要手动处理一下,将重复的文件进行清理,然后就可以正常归档了。

5  archive timeout 不要设置的太短,太短会强制产生PG-WAL 文件这些文件都会被填充值,造成PG_WAL膨胀的厉害。

通过命令可以查看当前正在使用的日志文件

SELECT pg_walfile_name(pg_current_wal_lsn());

test=# SELECT pg_walfile_name(pg_current_wal_lsn());pg_walfile_name      
--------------------------000000010000000000000003
(1 row)

这里PG通过pg_wal/archive_status 来进行数据的归档判断,并且归档进程每60秒进行一次尝试工作,调用pgarch_archivercopyloop() 来处理每个等待处理的WAL 段,通过archive_command 来进行数据的归档的处理

但归档的问题主要出在一个部分,就是归档中如何判断要进行下一个文件的归档,这里是通过archive_status 来进行判断的,但这里的问题是,每次需要对文件夹里面的文件进行一个遍历如果这里面的文件很多的情况下,会阻碍归档文件流程中的性能。

这里PG15对这个问题进行了梳理和解决,他们根据将文件名保存到数组的放方式来进行判断下一个需要进行归档的文件是那个。

其中的流程是

扫描 archive_status 目录,然后将需要进行归档的日志放到一个数组中,并且将信息提供给archive_command命令或模块,这样减少在目录中扫描的的数量,但仍会发生目录扫描,并存在相关的O(n^2)复杂度。

 通过这项改进,在社区的测试报告中,提到在这项上面提高了20多倍的性能。

写到这里并没有完,实际上我们在数据归档后还需要对归档后的文件进行清理,大多数的情况下,清理归档文件是通过手动,通过归档文件的日期来进行清理,利用磁盘空间和存储有效的数据归档文件。

在一些场合下,比如你没有使用一些高级的备份软件的情况下,你的数据归档最后的清理和留存可能会需要 pg_archivecleanup 命令来进行清理,pg_archivecleanup 本身没是一个非常小的,独立的单个文件,不需要利用postgresql 服务器,源代码400行,他的功能主要有以下函数来完成

initialize , TrimExtension, CleanupPriorWALFile, 

SetWALFileNameForCleanup

初始化是在数据库中调用函数并检测程序初始化中的对象是否是一个文件夹,如果不是则直接报错,同时TrimExtension是将该函数目录的每个文件的后缀都去掉,方便进行以主名来进行数据的清理, CleanupPriorWalFile 函数通过获得对应的wal 的文件名来将进行比较,比当前文件在早的文件都会被清理,这里通过setWalFileNameForCleanup 来进行数据的名的获取。

如果希望pg_archivecleanup 独立工作,可以通过如下的命令来设置,但这里首先需要获得正确的archivelocation的目录。

archive_cleanup_command = 'pg_archivecleanup archivelocation %r'

参考文章:

https://www.percona.com/blog/speed-up-of-the-wal-archiving-in-postgresql-15/

————————————————————————————

最近一直在除了持续学习数据库技术外,提高自己的认知的维度,4毋是最近和冯老师学到的,毋意,毋必,毋固, 毋我

1 毋意: 不要臆想,不要你认为,你觉得,你习惯,你不是事情的核心,庄子:且夫水之积也不厚,则其负大舟也无力,如果你做事,看书,经历不够广,那么你做的事情不能保证大概率在当时当下是对的。

2 毋必:  没有什么是绝对的,包含名人名言,要时刻保持清晰的思考,判断,认知是有局限的。

3 毋固: 没有什么事情是不能进行转换变通的,不要故步自封,不要过早的下结论,对事情在一开始就存在固有的开发和定义,不与时俱进,并同步最新的知识。

4 毋我: 做事不要以自己为中心,要以事情为中心,如何将事情完成好,是关键,而不是把自己摆到事情的前面,为了脸面,为了所谓的自尊

6ac9af48cfaaddea7e01a8591d62e57e.png

97a5d51d367c3f58ff7f60759491eda4.png

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

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

相关文章

LMX2571 芯片配置Verliog SPI驱动

前言 本实验使用ZYNQ的PL(FPGA)对LMX2571芯片进行配置,以下连接为相关的原理和软件使用资料。 TICS Pro 配置时钟芯片 文献阅读–Σ-Δ 小数频率合成器原理 LMX2571芯片数据手册 一、LMX2571配置时序分析 1.1 写时序 LMX2571使用24位寄存器进行编程。一个24位移位…

CSS去掉按钮阴影 | css去掉按钮边框 | 注意改变搜索的关键词、搜索方式

上图是在谷歌浏览器中运行的结果 button {box-shadow: none;height: 50px;width: 100px;background-color: white;border-color: white; }写了以上的css,发现按钮还是有阴影一样的东西,查阅网络资料的时候也一直在搜索“如何去掉按钮阴影”,…

计算数组中某一数字出现次数

计算数组中某一数字出现次数 思路实现普通数组的方法双向列表的方法 总结 思路 这个比较简单,思路其实就是遍历数组中所有的数字做一下对比,有的话记录一下即可。但是这几天看到了个双向列表LinkList的方法,所以拿出来做一下对比看看。 实现…

网站提示“不安全”怎么解决

在互联网中,安全问题至关重要。访问某些网站时,可能会遇到“不安全”警告,通常是由于缺乏SSL证书。SSL证书是数字证书,用于确保互联网通信的安全和保密。 “不安全”问题通常源于缺少SSL证书。SSL通过加密通信,防止第三…

“2023年的技术发展与个人成长:回顾与展望“

文章目录 每日一句正能量前言工作生活未来展望后记 每日一句正能量 凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。 前言 在这快速发展的信息时代,技术的进步和创新不…

CSS 向上扩展动画

上干货 <template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container&q…

MyBatis标签及其应用示例

MyBatis标签及其应用示例 1. select 1.1 标签属性 id唯一的标识符parameterType传给此语句的参数的全路径名或别名如&#xff1a;com.xxx.xxx.demo.entity.User或userresultType语句返回值类型或别名。如果是集合List&#xff0c;此处填写集合的泛型T&#xff0c;而不是集合…

SCT82630DHKR——5.5V-65V Vin同步降压控制器,可替代LM5145

描述&#xff1a; SCT82630是一款65V电压模式控制同步降压控制器&#xff0c;具有线路前馈。40ns受控高压侧MOSFET的最小导通时间支持高转换比&#xff0c;实现从48V输入到低压轨的直接降压转换&#xff0c;降低了系统复杂性和解决方案成本。如果需要&#xff0c;在低至6V的输…

【MySQL】数据库并发控制:悲观锁与乐观锁的深入解析

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 数 据 库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 悲观锁&#xff08;Pessimistic Locking&#xff09;: 乐观锁&#xff08;Optimistic Locking&#xff09;: 总结&#x…

SpringBoot3 应用分析

SpringBoot3-快速入门 1、简介 1. 前置知识 Java17Spring、SpringMVC、MyBatisMaven、IDEA 2. 环境要求 环境&工具版本&#xff08;or later&#xff09;SpringBoot3.0.5IDEA2021.2.1Java17Maven3.5Tomcat10.0Servlet5.0GraalVM Community22.3Native Build Tools0.9.1…

<JavaEE> TCP 的通信机制(五) -- 延时应答、捎带应答、面向字节流

目录 TCP的通信机制的核心特性 七、延时应答 1&#xff09;什么是延时应答&#xff1f; 2&#xff09;延时应答的作用 八、捎带应答 1&#xff09;什么是捎带应答&#xff1f; 2&#xff09;捎带应答的作用 九、面向字节流 1&#xff09;沾包问题 2&#xff09;“沾包…

深度学习之RNN

1.循环神经网络 在时间t的时候&#xff0c;对于单个神经元来讲它的输出y(t)如下 wx是对于输入x的权重&#xff0c;wy是对于上一时刻输出的权重 所以循环神经网络有两个权重。 如果有很多这样的神经元并排在一起 则在t时刻的输出y为 这时输入输出都是向量 2.记忆单元 由于循…

liunx系统突然不能启动jar

启动命令 nohup java -jar /date/gd_ly/jar/mssda-platform-backend-0.0.1-SNAPSHOT.jar -Dspring.config.location/date/gd_ly/jar/application-dev.yml 报错信息 Error: A JNI error has occurred, please check your installation and try again Exception in thread &q…

【起草】【第五章】定制ChatGPT数字亲人

身为普普通通的我们&#xff0c;不知道亲人们在哪一天就要离开这个世界 &#xff1f; 作为普普通通的程序员&#xff0c;我们可以为我们的亲人做点什么 &#xff1f; 让他们以某种形式留在人世间 ? 对话&#xff5c;6岁女孩病逝捐器官&#xff0c;妈妈&#xff1a;她去当天使…

Qt+Opencv:人脸检测

话接上一篇&#xff0c;我们仍使用在上篇《QtOpencv&#xff1a;Qt中部署opencv》创建的Qt项目来测试opencv提供的sample。 在正式开始本篇之前&#xff0c;我们先说做一下准备工作&#xff1a; 一、opencv官方文档 学习最权威和最可靠的方式&#xff0c;就是阅读官方文档和…

释放资源的方式

为什么要学这个释放资源的方式&#xff1f; //5 关流outputStream.close();inputStream.close();原来这种方式&#xff0c;一般项目都会有很多代码&#xff0c;万一前面的代码有异常&#xff0c;就无法执行到这一步&#xff0c;绑定的系统资源就得不到释放&#xff0c;影响系统…

腾讯云服务器和轻量服务器选哪个好(各自的优势区别)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

CGAL的形状规则化

规则化之前&#xff08;红色&#xff09;和之后&#xff08;绿色&#xff09;的闭合轮廓。 1、介绍 这个 CGAL包能够规范2D中的一组线段和开闭轮廓以及3D中的一组平面&#xff0c;以便所有输入对象根据用户指定的条件进行旋转和对齐。此外&#xff0c;我们提供了一个全局规范框…

linux cuda环境搭建

1&#xff0c;检查驱动是否安装 运行nvidia-smi&#xff0c;如果出现如下界面&#xff0c;说明驱动已经安装 记住cuda版本号 2&#xff0c;安装cudatoolkit 上官网CUDA Toolkit Archive | NVIDIA Developer 根据操作系统选择对应的toolkit 如果已经安装了驱动&#xff0c;选…

main函数的参数ac和av

概要&#xff1a; main函数有两个参数&#xff0c;ac和av ac表示参数的个数&#xff0c;程序名包括在内。也就是说程序无参数运行时&#xff0c;ac的值为1 av是一个字符串数组&#xff0c;这个数组中的每个元素表示一个参数&#xff0c;程序名包括在内。也就是说&#xff0c…