现场问题排查-postgresql某表索引损坏导致指定数据无法更新影响卷宗材料上传

问题现象

今天突然被拉进一个群,说某地区友商推送编目结果报错,在我们自己的卷宗系统上传材料也一直转圈,也删除不了案件卷宗,重置模板也没用,只有个别案件有问题。虽然这事儿不属于我负责,但还是抽时间给看了一眼,其实问题很简单,就是索引损坏了,估计之前有过异常断电之类的场景导致的,在这里记录一下。

排查过程

首先要来环境信息,并复现问题,通过浏览器F12控制台观测,指定案件上传卷宗任意材料时后端上传材料接口都会稳定返回一个数据库错误,关键字是“PSQLException: ERROR: index idx_ws_xxx contains unexpected zero page at block 1280517 Hint: Please REINDEX it.”。
错误提示其实已经很明显了,就是说索引损坏了,建议重建索引。所以就直接告诉现场重建索引就行了,考虑到现场版本比较低(PG9.6.3)不支持REINDEX CONCURRENTLY,给现场写了类似以下脚本让其执行后观察:

-- 查询索引定义脚本,供后续重建索引使用(第一列就是索引创建脚本)
SELECT indexdef, * FROM pg_indexes where indexname = 'idx_ws_xxx';
-- 删除损坏的索引
DROP INDEX idx_ws_xxx;
-- 在索引定义脚本中加上CONCURRENTLY关键字,防止创建索引时阻断表业务操作,毕竟有问题的数据很少,正常业务很多
CREATE INDEX CONCURRENTLY idx_ws_xxx ...;

好几个小时后问现场,现场答复还在执行中,虽然这个表有五千万的数据量,但也不至于这么慢吧?

-- 使用以下脚本查询数据库所有连接情况
select * from pg_stat_activity;
-- 使用以下脚本确认在运行的连接情况
select datname, pid, application_name, backend_start, wait_event_type, query, * from pg_stat_activity;

上面脚本能看到两个关键连接,一个是删除索引的脚本处于激活状态,且一直在等待锁,另一个是重建索引的表上有个autovacuum在跑且开始时间确实在drop索引的脚本之前,所以不需要再追踪具体锁进程也能猜出来该表自动清理任务影响了索引重建。

-- 先暂停该表的自动清理选项
alter table t_ws set (autovacuum_enabled = false);
-- 再杀掉该表的自动清理任务(自动清理是带事物的,杀掉只会导致数据回滚,不会损坏表)
select pg_terminate_backend(任务连接的pid);

上面脚本执行完发现还是会锁定,再次观察pg_stat_activity结果发现pg自动拉起来一个新的进程继续跑autovacuum。

-- 暂停数据库级别的自动清理选项
alter system set autovacuum = off;
-- 刷新配置,不用重启数据库
select pg_reload_conf();
-- 也可以用 show autovacuum 语句查看当前生效的配置值-- 删除索引并重建索引-- 恢复数据库级别的自动清理选项
alter system set autovacuum = on;
-- 刷新配置,不用重启数据库
select pg_reload_conf();

再次验证,搞定!

参考资料

PG9.6 REINDEX命令:http://postgres.cn/docs/9.6/sql-reindex.html
PG12 REINDEX命令:http://postgres.cn/docs/12/sql-reindex.html

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

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

相关文章

Redis01-基础-入门

零、文章目录 Redis01-基础-入门 1、认识 NoSQL NoSQL 知识请参考:https://blog.csdn.net/liyou123456789/article/details/132612444 2、认识 Redis (1)简介 Redis(Remote Dictionary Server,远程字典服务&…

【嘉立创EDA】如何在更新或转换原理图到PCB时,保留已有布局器件

文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.37 本文使用嘉立创EDA,描述在更新或转换原理图到PCB时,保留已有布局器件的方法。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题内容 …

03 APQC PROCESS CLASSIFICATION FRAMEWORK (PCF)

APQC流程分类框架(APQC Process Classification Framework, PCF)最初由美国生产力与质量中心(American Productivity & Quality Center, APQC)开发,旨在用于跨组织的流程性能基准比较。现在,它也常被用…

分析型数据库入门指南:如何选择适合你的实时分析工具?

一、什么是分析型数据库?为什么需要它? 据Gartner最新报告显示,超过75%的企业现已在关键业务部门部署了专门的分析型数据库,这一比例还在持续增长。 随着数据量呈指数级增长,传统数据库已无法满足复杂分析场景的需求…

body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数

在 NestJS 中,Body()、Param() 和 Query() 用于处理不同类型的请求参数。以下是它们的含义及前端传递方式: Body():请求体参数 • 含义:用于获取请求体中的数据(如 POST/PUT 请求中提交的 JSON、表单数据等&#xff09…

神经网络(自己记录)

一、神经网络基础 5分钟-通俗易懂 - 神经网络 反向传播算法(手算)_哔哩哔哩_bilibili 二、GAT

Redis Slot 槽位分片具体案例

‌键值槽位分配案例‌ 当执行 SET {kaigejava}k1 v1 时,Redis 会提取 {} 内的有效部分 kaigejava,通过 CRC16 算法计算哈希值,再对 16384 取余得到槽位。例如: 若计算结果为 1495,则该键会被分配到槽位 1495 对应的节…

【多模态模型】跨模态智能的核心技术与应用实践

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现(CLIP图像-文本检索)运行结果验证 三、性能对比测试方法论量化数据对比结果…

final static 中是什么final static联合使用呢

final static 联合使用详解 final 和 static 在 Java 中经常一起使用,主要用来定义类级别的常量。这种组合具有两者的特性: 基本用法 public class Constants {// 典型的 final static 常量定义public static final double PI 3.141592653589793;pub…

1.1 道路结构特征

1.1 道路结构特征 1.城市道路分类 道路网的地位、交通功能、沿线的服务功能。快速路 15 30主干路 15 30次干路 15 20支路 10 20 10(20)沥青路面、水泥混凝土路面、砌块路面沥青路面:沥青混凝土、沥青贯入式、沥青表面处治。沥青混凝土各种等级、沥青贯入式和沥青表面处治支路…

C++如何使用调试器(如GDB、LLDB)进行程序调试保姆级教程(2万字长文)

C++作为一门高性能、接近底层的编程语言,其复杂性和灵活性为开发者提供了强大的能力,同时也带来了更高的调试难度。与一些高级语言不同,C++程序往往直接操作内存,涉及指针、引用、多线程等特性,这些都可能成为错误的温床。例如,一个未初始化的指针可能导致程序崩溃,而一…

vite+vue构建的网站项目localhost:5173打不开

原因:关掉了cmd命令提示符,那个端口就没有被配置上,打开就是这样的。 解决方法:重新在工作目录下打开cmd,输入npm run dev重新启动项目。 重新出现这样的界面说明已经成功启动项目,再次在浏览器中刷新并输入…

自主可控鸿道Intewell工业实时操作系统

鸿道Intewell工业实时操作系统是东土科技旗下科东软件自主研发的新一代智能工业操作系统,以下是相关介绍: 系统架构 -Intewell-C全实时构型:设备上只运行自研RTOS的全实时系统,适用于有功能安全认证需求的实时控制场景&#xf…

将大语言模型(LLM)应用于自动驾驶(ADAS)中的几个方向,及相关论文示例

主要方法集中在如何利用LLM的强大推理能力和语言理解能力来增强自动驾驶系统的感知、决策和规划能力。以下是几种典型的方法和思路: 1. 基于LLM的驾驶决策与规划 方法:将LLM作为驾驶决策的核心模块,利用其强大的推理能力生成驾驶行为或轨迹…

rt-linux下的D状态的堆栈抓取及TASK_RTLOCK_WAIT状态

一、背景 在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里的 2.1 一节里的代码,我们已经有了一个比较强大的抓取D状态和等IO状态超过阈值的waker和wakee的堆栈状态的内核模块。在之前的博客 增加等IO状态的唤醒堆栈打印及缺页异常导致iowa…

【Redis】zset类型

目录 1、介绍2、底层实现【1】压缩列表【2】跳跃表哈希表 3、常用命令 1、介绍 有序集合结合了集合和有序列表的特性,每个元素都会关联一个分数,Redis正是通过这个分数来为集合中的成员进行排序。 2、底层实现 【1】压缩列表 适用条件 1、元素数量 ≤…

ZeroGrasp:零样本形状重建助力机器人抓取

25年4月来自CMU、TRI 和 丰田子公司 Woven 的论文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 机器人抓取是具身系统的核心能力。许多方法直接基于部分信息输出抓取结果,而没有对场景的几何形状进行建模,导致运动效果不…

AI大模型从0到1记录学习 linux day21

第 1 章 Linux入门 1.1 概述 1.2 Linux和Windows区别 第 2 章 VMware、Ubuntu、Xshell和Xftp安装 第 3 章 Linux文件与目录结构 3.1 Linux文件 Linux系统中一切皆文件。 3.2 Linux目录结构  /bin 是Binary的缩写, 这个目录存放着最经常使用的命令的可执行文件&#xff0c…

Pytest安装

一、简介 pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:简单灵活,容易上手支持参数化能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytes…

企业网站html源代码 企业网站管理源码模板

在数字化转型加速的今天,企业官网已成为品牌展示与业务拓展的核心阵地。本文将从技术实现角度,解析企业网站HTML基础架构与管理系统的源码设计逻辑,为开发者提供可复用的模板化解决方案。 企业网站源码5000多套:Yunbuluo.Net 一…