現場問題排查-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.pswp.cn/bicheng/78682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78682.shtml
英文地址,請注明出處:http://en.pswp.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 一…