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

news2024/11/25 14:48:32

在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.coloradmin.cn/o/1870773.html

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

相关文章

【第一周】认识小程序

目录 认识小程序发展历史发展前景发展优势个人企业/创业 账号申请开发工具下载流程使用说明 协作项目交流收益渠道 认识小程序 发展历史 微信小程序自2016年首次提出以来,经历了快速的发展和完善过程,以下是其主要发展历史节点: 2016年1月…

监控员工电脑的软件有哪些?6款企业必备的电脑监控软件

监控员工电脑的软件在企业管理和网络安全领域扮演着重要角色,它们可以帮助企业提高工作效率,确保数据安全,以及合规性。以下是六款知名的员工电脑监控软件: 1.安企神 - 一个全面的企业级电脑监控和管理解决方案。 2.Work Examine…

从单点到全景:视频汇聚/安防监控EasyCVR全景视频监控技术的演进之路

在当今日新月异的科技浪潮中,安防监控领域的技术发展日新月异,全景摄像机便是这一领域的杰出代表。它以其独特的360度无死角监控能力,为各行各业提供了前所未有的安全保障,成为现代安防体系中的重要组成部分。 一、全景摄像机的技…

个人支付系统实现

基础首页: 订单: 智能售卡系统 基于webmanworkerman开发 禁用函数检查 使用这个脚本检查是否有禁用函数。命令行运行curl -Ss https://www.workerman.net/check | php 如果有提示Function 函数名 may be disabled. Please check disable_functions in …

仓库管理系统13--物资设置

1、添加窗体 2、设计UI界面 注意这个下拉框的绑定&#xff0c;你看到的选项是由displaymember决定&#xff0c;当你选择了哪个选项时&#xff0c;后台绑定这个选项的ID <UserControl x:Class"West.StoreMgr.View.GoodsView"xmlns"http://schemas.microsoft…

群晖系统百度网盘套件卸载之后无法再次安装 ContainerManager项目无法删除

前言 最近重新组了个NAS&#xff0c;在套件迁移的时候遇到个头疼的问题。在用矿神的百度网盘在迁移的时候出错了&#xff0c;于是我自己删掉baiduapp得容器和镜像然后卸载套件。不知道中间出了啥问题&#xff0c;套件是已经卸载了&#xff0c;但是群晖ContainerManager套件中的…

前端实现 海浪(波浪)进度条效果(支持自定义长度;调节速度,2s缓冲结束)

实现海浪进度条 文章目录 实现海浪进度条效果图如下(投入使用的版本)背景和过程一、调试和探索过程(下面都会给出来对应代码)二、类似Element-plus的进度条样式1. CSS的样式如下2. HTML结构如下 二、电涌效果的进度条如下1. CSS的样式如下2. HTML的结构如下:3. JavaScript代码如…

C# 异步编程详解(Task,async/await)

文章目录 1.什么是异步2.Task 产生背景3.Thread(线程) 和 Task(异步)的区别3.1 几个名词3.2 Thread 与 Task 的区别 4.Task API4.1 创建和启动任务4.2 Task 等待、延续和组合4.3 task.Result4.4 Task.Delay() 和 Thread.Sleep() 区别 5.CancellationToken 和 CancellationToken…

基于模型蒸馏的模型加速方案总结

1.简介 1.1目的 在过去的一段时间里&#xff0c;对基于模型蒸馏技术的模型加速方案的方法在多个数据集上进行了一系列的实验。所谓的模型蒸馏技术&#xff0c;简单的来说就是利用一个设计简单的小网络去学习一个设计比较复杂的大网络。特别的有&#xff0c;本次实验针对每一个…

计算机图形学入门18:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照&#xff0c;但是着色并不会进行阴影的计算&#xff0c;阴影需要单独进行处理&#xff0c;目前最常用的阴影计算技术之一就是Shadow Mapping技术&#xff0c;也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…

压缩pdf文件大小的方法,如何压缩pdf格式的大小

pdf太大怎么压缩&#xff1f;当你需要通过电子邮件发送一个PDF文件&#xff0c;却发现文件太大无法成功发出时&#xff0c;这些情况下&#xff0c;我们都需要找到一种方法来压缩PDF文件&#xff0c;以便更便捷地进行分享和传输。PDF文件的大小通常与其中包含的图片、图形和文本…

【智能算法应用】麻雀搜索算法在物流配送中心选址的应用(无待选配送中心)

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法&#xff08;SSA&#xff09;原理及实现 2.数学模型 模型假设 待定物流配送中心的库存总能满足需求点的需求不考虑从工厂到待定物流配送中心的运输成本不考虑选定区域内待确定…

openinstall拥抱鸿蒙生态,SDK全面适配HarmonyOS NEXT

作为国内领先的App渠道统计与深度链接服务商&#xff0c;openinstall持续推动鸿蒙生态建设&#xff0c;近日正式发布openinstall HarmonyOS SDK&#xff0c;并成功入驻鸿蒙生态伙伴SDK专区&#xff0c;成为华为鸿蒙生态的合作伙伴&#xff0c;为鸿蒙应用开发者带来安全合规、高…

可用的搜索引擎

presearchhttps://presearch.com/yandexhttps://ya.ru

MySQL简介:开源数据库的基石(一)

目录 引言&#xff1a;数据库领域的革新者 一、MySQL的发展历程&#xff1a;从开源先锋到行业领袖 二、MySQL的核心特性&#xff1a;性能、安全与灵活性并重 三、MySQL的应用场景&#xff1a;从Web开发到企业级应用的全面覆盖 四、MySQL在开源数据库中的地位&#xff1a;开…

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

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

如何寻找强势货币和弱势货币?

外汇交易的独特之处在于&#xff0c;它融合了两种货币的价值&#xff0c;其中一种货币的价值通过另一种货币来体现。举例来说&#xff0c;USDJPY外汇反映了美元与日元之间的价值关系&#xff0c;而EURUSD则代表了欧元与美元的价值对比。 通过开仓操作&#xff0c;我们预测一种…

ai assistant 是所有编程助手中最出色的一款 ?

ai assistant激活成功后&#xff0c;如图 ai assistant渠道&#xff1a;https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上&#xff0c;Google 为 Android Studio 推出了 Studio Bot 功能&#xff0c;使用了谷歌编码基础模型 Codey,Codey 是…

nacos漏洞汇总

1 nacos介绍 1.1 nacos是啥 Alibaba Nacos是阿里巴巴推出来的一个新开源项目&#xff0c;是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;可以快速实现动态服务发现、服…

【Java Web】Vite构建前端目录结构

目录 一、Vite概述 二、Vite构建Vue3工程化项目 三、ViteVue3项目目录结构 四、ViteVue3项目组件&#xff08;SFC入门&#xff09; 五、ViteVue3样式导入方式 六、ViteVue3响应式数据和setup语法糖 一、Vite概述 Vite是一种新型前端构建工具,能够显著提升前端开发体验;Vite结合…