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.mzph.cn/news/861821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全感爆棚,锁定六氟化硫SF6气体泄漏报警监测系统

一、概述 六氟化硫SF6气体已有百年历史,它是法国两位化学家Moissan和Lebeau于1900年合成的人造惰性气体, 1947年提供商用。当前SF6气体主要用于电力工业中。化学性质稳定。微溶于水、醇及醚,可溶于氢氧化钾。不与氢氧化钠、液氨、盐酸及水起…

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护

常见的Java开发难题包含解决办法内存泄漏异常处理代码质量和维护 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 I…

实践案例:使用Jetpack Navigation创建一个新闻应用

在这个实践案例中,我们将使用Jetpack Navigation创建一个简单的新闻应用。这个应用将包含以下功能: 新闻列表页面:显示一组新闻文章。新闻详情页面:显示选定新闻文章的详细信息。用户资料页面:显示用户的资料信息。 …

从爬取到分析:Faraday爬取Amazon音频后的数据处理

什么是Faraday? Faraday是一个简单、灵活的高级爬虫框架,支持多种编程语言。它提供了一套丰富的API,允许开发者快速构建复杂的爬虫应用。Faraday的主要特点包括: 模块化设计:易于扩展和自定义。多语言支持&#xff1…

Vite 动态导入警告问题解决方案

如上图我要实现从后台获取权限菜单并动态导入进行渲染 但由于 vite 暂时不支持这种导入方式 图中也给出了提示 本人也是这么去做了 但并没什么卵用 后来参考了 vite 的 import.meta.glob 这种方式 我在处理菜单权限控制的菜单里进行了如下操作: …

【网络架构】lvs集群

目录 一、集群与分布式 1.1 集群介绍 1.2 分布式系统 1.3 集群设计原则 二、LVS 2.1 lvs工作原理 2.2 lvs集群体系架构 ​编辑 2.3 lvs功能及组织架构 2.4 lvs集群类型中术语 三、LVS工作模式和命令 3.1 lvs集群的工作模式 3.1.1 lvs的nat模式 3.1.2 lvs的dr模式 …

从此以后,将硬件接入大语言模型(LLM)将变得如此简单~

一、前言 本文中将使用ESP-AI开源库来实现将硬件接入AI,整个过程将非常的轻松~ 什么是ESP-AI? 为你的开发板提供全套的AI对话方案,包括但不限于 ESP32 系列开发板的 IATLLMTTS 集成方案。 交流群 QQ 交流群: 854445223 技术栈 ESP-AI 分为了服务端和…

001 ElasticSearch7.x 、IK分词器、Kibana 环境搭建、安装

ElasticSearch 7.x 文章目录 ElasticSearch 7.x1.windows环境安装1.ik分词器安装2.es启动3.Kibana启动 2.Linux环境安装3.分词器1.分词测试2.ES中默认分词器3.IK分词器4.自定义分词器 1.windows环境安装 es下载地址: https://www.elastic.co/cn/downloads/past-rel…

超声波清洗机洗眼镜效果好吗?四大主流超声波清洗机终极大测评

清洗眼镜是日常生活中一件很麻烦的事情,常规的清洗方式无法完全清洁镜片上的细菌和污垢,而且容易造成划痕。也有很多朋友为了节省时间,每次清洗眼镜都用衣服衣角随便擦拭擦拭就完事了,但其实这样做往往会很伤眼镜,缩短…

矩阵新玩法,云微客AI矩阵系统开启新营销大门

在激烈的市场竞争中,商家企业们都在追求更加高效的营销方式,在如今流量至上的时代,短视频凭借其魅力,成为了众多企业吸引流量、获客引流的核心营销途径。而想要挤进短视频流量圈的你,是否经常听到矩阵这个词呢&#xf…

远程工具的使用

远程连接工具的作用,通过远程连接到服务器上,方便操作! 1.常见的远程连接工具 XShell:这是一款Windows平台下的SSH客户端软件,支持SSH1、SSH2、SFTP、TELNET、RLOGIN等多种协议,功能丰富,包…

【MotionCap】conda 链接缺失的cuda库

conda 安装的环境不知道为啥python 环境里的 一些cuda库是空的要自己链接过去。ln 前面是已有的,后面是要新创建的 ln -s <path to the file/folder to be linked> cuda 有安装 libcublas 已经在cuda中 (base) zhangbin@ubuntu-server:~/miniconda3/envs/ai-mocap/lib/…

智能语音新革命:有道与Azure的API服务对决

在当今技术飞速发展的时代&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为连接不同软件和服务的桥梁。无论是开发移动应用、构建网页服务&#xff0c;还是实现物联网设备的互联互通&#xff0c;API都在其中扮演着不可或缺的角色。随着市场上各种API接口的涌现&am…

整数智能与上海数据交易所携手,共筑数据要素市场新篇章

近期&#xff0c;整数智能荣获上海数据交易所“数据治理服务商”证书&#xff0c;正式加入上海数据交易所数商生态&#xff0c;成为上海数据交易所官方认证的数据治理服务商。 在数字经济的浪潮中&#xff0c;上海数据交易所一直扮演着引领者和推动者的角色。紧扣建设国家级…

8大趋势,重塑金融服务行业

谈论“金融服务行业”就像谈论“亚洲大陆”。这是因为&#xff0c;通用行业概念但它掩盖了许多细分领域的细微差别和多样性&#xff0c;以及人们思考、工作和感受方式的巨大差异。 银行应用程序和一个量化交易公司都是金融服务公司&#xff0c;但它们的运营方式可能天壤之别。…

Quads,一个无敌的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - Quads。 Github地址&#xff1a;https://github.com/fogleman/Quads 在科学计算和工程应用中&#xff0c;数值积分是一个常见的问题。Python的Quads库…

WiFi模块ESP8266同阿里物联网云平台连接(超详细)

写在前面&#xff1a;本节主要的内容是利用ESP8266模块&#xff0c;同阿里云物联网平台的连接&#xff0c;为后面的实现数据的远程展示与处理做好铺垫。 本节的主要内容分为一下几个阶段进行&#xff1a; 1、阿里云物联网平台的创建2、阿里云 IOT studio界面绘制3、mqtt.fx软件…

Web服务器与Apache(虚拟主机基于ip、域名和端口号)

一、Web基础 1.HTML概述 HTML&#xff08;Hypertext Markup Language&#xff09;是一种标记语音,用于创建和组织Web页面的结构和内容&#xff0c;HTML是构建Web页面的基础&#xff0c;定义了页面的结构和内容&#xff0c;通过标记和元素来实现 2.HTML文件结构 <html>…

【初阶数据结构】二叉树(附题)

目录 1.树概念及结构 1.1树的概念 1.2 树的相关概念&#xff08;树结构的相关概念命名参考自然树和人的血缘关系&#xff09; 1.3 树的表示 1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff0c;初次之外网盘中使用到&#xff09; 2.二叉树概念及结构 …

【pytorch08】拼接与拆分

1.拼接与拆分 CatStackSplitChunk 2.Cat 有两张成绩单 [class1-4,students,scores] [class5-9,students,scores]’ 要把这两个成绩单合并在一起 如何理解该行为 注意&#xff1a;班级情况中 A的tensor是[4,32,8],B的tensor是[5,32,8]如果我们是在0维上进行拼接&#xff0c;要…