首页 > 数据库 >Postgresql日志归档、复制槽概念

Postgresql日志归档、复制槽概念

时间:2023-07-22 14:23:11浏览次数:47  
标签:wal Postgresql 复制 PG 归档 日志 从库

问题 1 数据日志什么时候归档 ?

其实这个问题是比较需要明白的,到底日志在正常的情况下,什么时候才能归档, 到底条件是什么,要开启 postgresql 的日志的归档的前提条件,主要需要配置
1 wal_level = replica (或 logical)
2 archive_mode = on
3 archive_command = 'test ! -f /pgdata/archive/%f && cp %p /pgdata/archive/%f'

后日志就可以从原来的pg_wal 目录被定期的复制到对应的archive目录中了.
那么什么情况会将日志放入到归档的日志目录中
1 通过 select pg_switch_wal(); 命令来对日志进行分割后,触发archive 机制
2 日志文件写满预定的设计的大小后,触发归档
3 Archive_timeout 设置相关的归档的超时时间,在达到时间后,日志会被切割和进行归档
系统清理PG_WAL的文件和归档并没有关系,归档是上面问题 1 中解释的, 而PG_WAL的数据并不是归档后就清理了. 另外在Checkpoint 前,系统也会腾出足够的空间来寄存新的PG_WAL的日志文件将现有的文件清理出去(应该是归档后的wal 文件),

2 数据库设置的逻辑复制,并且启动了逻辑复制槽 replication slot 的问题
PG 数据库中如果启动了逻辑复制槽的情况下, 或者启动复制槽的情况下,只有在从库获得PG_WAL的文件后,才有可能将数据从PG_WAL中进行清理,否则会一致增加PG_WAL文件,直到磁盘涨满,或者从库开始接收数据.

wal_level决定多少信息写入到 WAL 中。默认值是replica,它会写入足够的数据以支持WAL归档和复制,包括在后备服务器上运行只读查询。minimal会去掉除从崩溃或者立即关机中进行恢复所需的信息之外的所有记录。最后,logical会增加支持逻辑解码所需的信息。每个层次包括所有更低层次记录的信息。这个参数只能在服务器启动时设置。

复制槽分为物理复制槽physical replication slot和逻辑复制槽logic replication slot。

物理复制槽

物理复制槽一般结合流复制一起使用,能够很好的保证备库需要的日志不会在主库删除。
逻辑复制槽

Logic replication slots一般被用于逻辑异步复制,一个很好的应用是用于异构数据库之间的逻辑复制。

大致原理是将源端xlog进行解码,解析成具体sql,然后到目标端进行回放。
支持逻辑解码需要将wal_level设置成logic,logic会在replica的基础上增加一些信息以支持逻辑编码,该模式会增大wal日志的数量,尤其是大量的updata、delete操作的库。

原理
Replication Slot实质上是内存中的一些数据结构,加上持久化保存到pg_replslot/目录中的二进制状态文件。

在PG启动的时候,预先在共享内存中分配好这些数据结构所用内存(即一个大小为max_replication_slots的数组)。这些数据结构在用户创建replication slot时开始被使用。一个Replication Slot被创建并使用后,其数据结构和状态文件会被wal(write-ahed-log)的发送者(wal sender)进程更新。

replication slot有重新创建新的与从库的连接吗?
没有。Replication Slot还是使用了wal_sender原有连接(由于一个从库一个wal_sender连接,所以一个从库和主库之间也只有一个active的Replication Slot)。

注意事项:

1)如果收不到从库的reply,Replication Slot的状态restart lsn会保持不变,造成主库会一直保留本地日志,可能导致日志磁盘满。所以应该实时监控日志磁盘使用情况,并设置较小的wal_sender_timeout,及早发现从库断掉的情况。

2)将hot_standby_feedback设为on时,注意如果从库长时间有慢查询发生,可能导致发回到主库的xmin变化较慢,主库的vaccum操作停滞,造成主库被频繁更新的表大小暴增。

Postgresql 归档中的一些问题集中总结-腾讯云开发者社区-腾讯云
PostgreSQL 逻辑复制模块介绍 - 墨天轮
postgresql之replication slot_PostgreSQL运维技术的博客-CSDN博客

标签:wal,Postgresql,复制,PG,归档,日志,从库
From: https://www.cnblogs.com/sanguoasd/p/17573278.html

相关文章

  • PostgreSQL 子查询
    子查询(Subquery)是指嵌套在其他SELECT、INSERT、UPDATE以及DELETE语句中的查询语句。子查询的作用与多表连接查询有点类似,也是为了从多个关联的表中返回或者过滤数据。例如,我们想要知道哪些员工的月薪大于平均月薪,可以通过子查询实现:SELECTe.first_name,e.last_name,e.salary......
  • 【865】PostgreSQL相关
    ref:PostgreSQL教程正常下载安装,mac安装路径为/Applications/PostgreSQL15/pgAdmin4.app打开pgAdmin4.app新建的table位置 ......
  • 学习日志
    7.21今天继昨天的递归进一步复习,写了一道搜索与回溯的题Letter#include<bits/stdc++.h>usingnamespacestd;intn,m,maxt=0;charc[25][25];map<char,bool>p;boolf[25][25];constshortdx[]={0,0,-1,1};constshortdy[]={-1,1,0,0};voiddfs(intx,inty,intt)......
  • java aop记录用户操作日志如何获取请求参数
    在Java中,AOP(面向切面编程)是一种编程范式,它可以将横切关注点(如日志记录)从业务逻辑中分离出来,使得代码更加清晰、可维护和可扩展。在记录用户操作日志时,我们可以使用AOP来拦截请求并获取请求参数。首先,我们需要创建一个切面类来实现日志记录的逻辑。假设我们使用Spring框架和AspectJ......
  • Intellij IDEA 显示 access.log 日志
    先配置  SpringBoot记录access.log日志,先让accesslog 显示出来  ......
  • k8s 日志收集
    日志收集流程filebeat--->kafka--->logstash--->elasticsearchlogstash.confinput{kafka{bootstrap_servers=>"172.16.3.213:19092,172.16.3.213:29092,172.16.3.213:39092"topics=>["app-1"]codec=>"json......
  • python2发送日志到es
    如何用Python2发送日志到ES一、流程概述以下是将日志发送到Elasticsearch(ES)的整个流程,包括准备工作和代码实现。我们将使用Python2来完成这个任务。步骤描述1.准备环境安装所需的Python依赖库和Elasticsearch2.连接ES使用Python代码连接到Elasticsearch3.创......
  • Linux删除log日志文件命令
    如下:1、删除文件夹及子目录下的日志文件find.-name'*.log*'|xargsrm2、忽略当前文件夹下的文件夹,可在-v后面添加  “/文件夹名称”,这里用log文件夹举例find.-name'*.log*'|grep-v/log|xargsrm这样就可以删除总文件夹下除了log文件夹以外的.log文件了......
  • windows mysql 启动日志
    实现"WindowsMySQL启动日志"的步骤下面是实现"WindowsMySQL启动日志"的步骤的表格示例:步骤描述1安装MySQL服务器2配置MySQL服务器启动参数3设置MySQL服务器日志输出4启动MySQL服务器接下来,我们将逐步解释每个步骤应该如何执行。步骤1:安......
  • 学习日志
    7.20今天主要是复习了以前的知识点,顺便做了一道递归入门题斐波那契数列#include<bits/stdc++.h>usingnamespacestd;intfbnq(intm){ if(m==1||m==2){ return1; }else{ if(m<1)return0; elsereturnfbnq(m-1)+fbnq(m-2); }}intn;intmain(){ cin>>n;......