postgre事务id用完后,如何解决这个问题

在PG中事务年龄不能超过2^31 (2的31次方=2,147,483,648),如果超过了,这条数据就会丢失。
PG中不允许这种情况出现,当事务的年龄离2^31还有1千万的时候,数据库的日志中就会
有如下告警:

warning:database “UniMonDB” must be vacuumed within 177000234 trabnsactions
HINT: To avoid a database shutdown,execute a database-wide VACUUM in “UniMonDB”.

如果不处理,当事务的年龄离2^31还有1百万时,数据库服务器出于安全考虑,将会自动
禁止任何来自任何用户的连接,同时在日志中是如下信息:(某个现场服务器的pg日志截图)
请添加图片描述
然后我们去查看这个表的事务id
请添加图片描述
请添加图片描述
也是因为某个表的事务id用完了,出现的这个问题,我们的程序使用了otlv4的相关数据库接口,会导致程序操作数据库的时候崩溃。所以不管怎样都需要解决事务id用完这个问题。看过其他方案,进入pg的单用户模式对全表进行vacuum freeze或者vacuum full。我们根据自身情况做对应处理,以下是实际生产环境上的操作步骤。

对于事务id消耗较少的表:

先回收空间

1)、停止数据库服务
2)、备份数据库,确定数据库停止后,可以直接copy一份main目录
tar -cvzf /var/lib/postgresql/9.1/main_back.tar /var/lib/postgresql/9.1/main
3)、备份好后,启动数据库
4)、查询死元组数据的十张表,并将表名记录下来
select relname, coalesce(round(n_dead_tup * 100 / (case when n_live_tup + n_dead_tup = 0 then null else n_live_tup+n_dead_tup end), 2),0.00) as dead_tup_ratio, n_dead_tup ,n_live_tup, last_vacuum, last_autovacuum from pg_stat_all_tables where relname like ‘tbl_%’ order by n_dead_tup desc limit 10;
在这里插入图片描述

5)、一张表一张表清理,清理命令(vacuum full 表名)
在这里插入图片描述

6)、vacuum执行完后,再查看死元组数量,表名用第四步查出来的表名
select relname, coalesce(round(n_dead_tup * 100 / (case when n_live_tup + n_dead_tup = 0 then null else n_live_tup+n_dead_tup end), 2),0.00) as dead_tup_ratio, n_dead_tup ,n_live_tup, last_vacuum, last_autovacuum from pg_stat_all_tables where relname in (‘tbl_formconfig’,‘tbl_userpermission’,‘tbl_iniext’,'tbl_processlistinfo ',‘tbl_userloginerror’,‘tbl_devchangeinfo’,‘tbl_secpolicysetinfo’,‘tbl_devbaseinfo’,‘tbl_pcidevinfo’,‘tbl_ini’);

7)、这是因为pg_stat_all_tables的数据没有几十更新,也就是第四步查询的数据不会变,如下
在这里插入图片描述

8)、这时候需要手动更新相关表数据才行,表名用第四步查出来的表名
analyze tbl_formconfig, tbl_userpermission, tbl_iniext, tbl_processlistinfo , tbl_userloginerror, tbl_devchangeinfo, tbl_secpolicysetinfo, tbl_devbaseinfo, tbl_pcidevinfo, tbl_ini;
然后再用第6步的命令查询就ok了。
在这里插入图片描述

而后再回收事务id
1)、停止数据库服务
2)、备份数据库,确定数据库停止后,可以直接copy一份main目录
3)、tar -cvzf /var/lib/postgresql/9.1/main_back.tar /var/lib/postgresql/9.1/main
4)、备份好后,启动数据库
5)、查出表年龄最大的十张表,记住表名
select relname,age(relfrozenxid) from pg_class where relkind in (‘t’,‘r’) and relname like ‘tbl_%’ order by age(relfrozenxid) desc limit 10;
在这里插入图片描述

6)、处理表事务id ,第五步记住的表名
vacuum freeze 表名;
在这里插入图片描述

7)、查询处理后的状态,第五步记住的表名
select relname,age(relfrozenxid) from pg_class where relkind in (‘t’,‘r’) and relname in (‘tbl_acaccountinfo’, ‘tbl_acaccountmgm’, 'tbl_acaccountmgmresult ', 'tbl_acagentaccessaudit ', ‘tbl_acagentinfo’, ‘tbl_acauditinfo’, ‘tbl_acauditsecpolicy’, ‘tbl_acbaseparam’, ‘tbl_acl’, ‘tbl_aclentry’);
在这里插入图片描述

而如果事务id的使用情况是tbl_devprofile这种情况。vacuum可能会非常的耗时,并且可能会失败并且出现一系列的其他问题,增加处理的负担。

在这里插入图片描述
对此不妨尝试重建新库的方式来重置事务id

pg迁移旧数据库内容到新库
注!!/var/lib/pgsql/是linux用户postgres的家目录,不同环境可能会不通,请自己修改
 
 
nohup pg_dumpall -U postgres -h 127.0.0.1 -p 5432 -f /root/backup.sql &             --先导出原UniMonDB的所有数据
chmod 777 /root/backup.sql ; chown leagsoft:leagsoft /root/backup.sql               --修正权限
mv /root/backup.sql /var/lib/pgsql/                                                 --把备份数据放到postgres的家目录下
然后
su - postgres                                                                       --切换至postgres
/usr/pgsql-11/bin/initdb -d ~/main                                                  --初始化一个全新的库,面子也叫main,暂时放在postgres的家目录下
cp /var/lib/postgresql/9.1/main/postgresql.conf ~/
cp /var/lib/postgresql/9.1/main/postgresql.auto.conf ~/
cp /var/lib/postgresql/9.1/main/pg_hba.conf ~/                                      --将旧库的是哪个配置文件先先放到postgres的家目录
 
chmod 600 postgresql.conf postgresql.auto.conf pg_hba.conf                          --修正权限
cp postgresql.conf postgresql.auto.conf pg_hba.conf ~/main                          --替换新库的配置文件
 
vi ~/main/postgresql.conf                                                           --把里面的端口从5432改成别的,比如6432
/usr/pgsql-11/bin/pg_ctl -D main  start                                             --手动启动的方式启动新库
psql -p 6432                                                                        --进入新库控制台
\i backup.sql                                                                       --导入备份的数据到新库
\q                                                                                  --退出控制台
vi ~/main/postgresql.conf                                                           --把里面的端口改回5432
 
 
切回root
systemctl stop postgresql                                                           --软件将/var/lib/postgresql/9.1/main的启动注册称为了系统服务,停止旧库
mv /var/lib/postgresql/9.1/main /var/lib/postgresql/9.1/main_old                    --将旧库备份
mv /var/lib/pgsql/main /var/lib/postgresql/9.1/main                                 --将新库放到系统服务的指定路径
systemctl start postgresql                                                          --启动新库
 
 
一切恢复正常

所以实际生产中可以定期去做收缩回收操作

以上是从同事那偷学的解决方案

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pc端制作一个顶部固定的菜单栏

效果 hsl颜色 hsl颜色在css中比较方便 https://www.w3school.com.cn/css/css_colors_hsl.asp 色相(hue)是色轮上从 0 到 360 的度数。0 是红色,120 是绿色,240 是蓝色。饱和度(saturation)是一个百分比值…

模板方法模式在金融业务中的应用及其框架实现

引言 模板方法模式(Template Method Pattern)是一种行为设计模式,它在一个方法中定义一个算法的框架,而将一些步骤的实现延迟到子类中。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。在金融业务中&#xff…

Python的numpy简单使用

1.可以调用引入numpy里面的函数,如add可以把俩数相加,也可以创建一个数组arr,arr.shape是数组arr的属性,如果后有跟()就是里面的一个函数 type()函数可以知道里面是什么类型 变量.shape可以知道这个变量是…

[数据集][目标检测]猪只状态吃喝睡站检测数据集VOC+YOLO格式530张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):530 标注数量(xml文件个数):530 标注数量(txt文件个数):530 标注类别…

适配手机《植物大战僵尸杂交版》最新整合包,附Android、iOS、Windows保姆级教程和工具合集!

最近,新版的《植物大战僵尸杂交版》火爆全网啊!许多小伙伴不知道手机和电脑怎样安装设置才能畅玩《杂交版》,所以今天阿星特意为大家准备了一份安装工具集。 里面有安卓、iOS及电脑端的安装包,包含安装视频教程、修改器、防闪退、…

探索ChatGPT是如何改变癌症护理

了解生成式人工智能(尤其是 ChatGPT)如何通过高级数据集成和个性化患者管理来增强诊断和治疗,从而改变癌症治疗。了解 Color Health 的创新副驾驶模型及其对早期检测和患者结果的影响。 近年来,人工智能与医疗保健的融合为癌症治疗…

使用 fvm 管理 Flutter 版本

文章目录 Github官网fvm 安装Mac/Linux 环境Windows 环境 fvm 环境变量fvm 基本命令 Github https://github.com/leoafarias/fvmhttps://github.com/flutter/flutter 官网 https://fvm.app/ fvm 安装 Mac/Linux 环境 Install.sh curl -fsSL https://fvm.app/install.sh …

基于模糊神经网络的时间序列预测(以hopkinsirandeath数据集为例,MATLAB)

模糊神经网络从提出发展到今天,主要有三种形式:算术神经网络、逻辑模糊神经网络和混合模糊神经网络。算术神经网络是最基本的,它主要是对输入量进行模糊化,且网络结构中的权重也是模糊权重;逻辑模糊神经网络的主要特点是模糊权值可…

shark云原生-日志管理体系-filebeat

文章目录 1. deploy 文件1.1 RBAC1.2. DaemonSet1.2.1. Elasticsearch 连接信息1.2.2. Volume 1.3. ConfigMap1.3.1. 日志收集路径1.3.2. 日志事件输出目标 2. 在控制平面节点上运行Filebeat3. 查看输出3.1. 关于处理器 processors 4. 日志收集配置4.1. 手动指定日志收集路径4.…

索引:通往高效查询的桥梁(五)

引言 上一章,我们探索了SQL的基础知识,从DDL、DML到DQL,掌握了构建和操作数据库的基本技能。现在,我们将目光转向数据库性能的核心——索引。索引,犹如图书馆中的目录系统,极大地加速了数据检索过程&#…

Unity实现简单的MVC架构

文章目录 前言MVC基本概念示例流程图效果预览后话 前言 在Unity中,MVC(Model-View-Controller)框架是一种架构模式,用于分离游戏的逻辑、数据和用户界面。MVC模式可以帮助开发者更好地管理代码结构,提高代码的可维护性…

CloudFlare Tunnel实现内网穿透

CloudFlare Tunnel 背景: 家中设备处于内网NAT环境,希望使用CF tunnel构建内网穿透的环境。 有了CF tunnel后,可实现: 家中的NAS可以直接SSH AWS的云服务可迁到到NAS NAT主机借助CF tunnel部署服务 步骤: clou…

Mx Admin 基于react18的后台管理系统

前言 Mx Admin 基于React18 vite5 antd5的后台管理系统, 基于RBAC的权限控制系统,动态菜单和动态路由支持tab路由缓存嵌套菜单支持多种菜单布局模式亮暗色主题切换

成为画图大师,用图表讲故事

这些问题你是否遇到过: 项目总结会上,如果用数据呈现你做的价值? 完善详尽的数据分析得出了让人信服的结论,如何呈现在BOSS面前? 我们要的不是数据,而是数据告诉我们的事实 数据很重要,但只是原料,所以…

基于Spring Boot的在线医疗咨询平台的设计与实现【附源码】

基于Spring Boot的在线医疗咨询平台的设计与实现 Design and implementation of the computer hardware mall based on Spring Boot Candidate: Supervisor: April 20th, 2024 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师…

(2024,DDPM,DDIM,流匹配,SDE,ODE)扩散:基础教程

Step-by-Step Diffusion: An Elementary Tutorial 公和众与号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0 前言 1 扩散的基础知识 1.1 高斯扩散 1.2 抽象中的扩散 1.3 离散化 2 随机采样…

【强化学习的数学原理】课程笔记--2(贝尔曼最优公式,值迭代与策略迭代)

目录 贝尔曼最优公式最优 Policy求解贝尔曼最优公式求解最大 State Value v ∗ v^* v∗根据 v ∗ v^* v∗ 求解贪婪形式的最佳 Policy π ∗ \pi^* π∗一些证明过程 一些影响 π ∗ \pi^* π∗ 的因素如何让 π ∗ \pi^* π∗ 不 “绕弯路” γ \gamma γ 的影响reward 的…

qt for android 使用打包sqlite数据库文件方法

1.在使用sqlite数据库时,先将数据库文件打包,放置在assets中如下图: 将文件放置下android中的assets下的所有文件都会打包在APK中,可以用7zip查看apk文件 2.在qt代码读取数据文件,注意在assets下的文件都是Read-Only,需…

[AIGC] Shell脚本在工作中的常用用法

Shell脚本是一种为 shell 编写的脚本程序。商业上的 Unix Shell 一般都配备图形界面,主要包括:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh&…

抓紧收藏!7 款令人惊艳的 AI 开源项目

🐼 关注我, 了解更多 AI 前沿资讯和玩法,AI 学习之旅上,我与您一同成长! 🎈 进入公众号,回复 AI, 可免费领取超多实用的 AI 资料 和内容丰富的 AI 知识库地址。 自从去年 AIGC 兴起以来,AI 开源…