news 2026/2/28 2:34:22

手动执行VACUUM,无法清理表中的dead tuple

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手动执行VACUUM,无法清理表中的dead tuple

文章目录

  • 环境
  • 症状
  • 问题原因
  • 解决方案

环境

系统平台:N/A
版本:4.1.1

症状

在业务并不繁忙的情况下发现服务器负载较高,执行SQL的速度明显缓慢。检查数据库TOP SQL,发现与表test有关,查看该表的统计值,live_tuple只有91966条,dead tuple为702346条。

highgo=# select n_live_tup,n_dead_tup from pg_stat_all_tables where relname = 'test';n_live_tup|n_dead_tup------------+------------91966|702346(1row)

手动对该表执行VACUUM同样无法回收dead tuple,报错如下:

highgo=# vacuum(verbose,analyze) test; INFO: 00000: vacuuming "public.test" INFO: 00000: index "index_test_content_id" now contains 146076 row versions in 698 pages DETAIL: 0 index row versions were removed. 175 index pages have been deleted, 126 are currently reusable. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: 00000: index "test_pkey" now contains 146076 row versions in 568 pages DETAIL: 0 index row versions were removed. 77 index pages have been deleted, 68 are currently reusable. CPU 0.00s/0.00u sec elapsed 0.00 sec. INFO: 00000: "test": found 0 removable, 789485 nonremovable row versions in 10178 out of 10276 pages DETAIL: 702346 dead row versions cannot be removed yet. There were 59707 unused item pointers. Skipped 0 pages due to buffer pins. 0 pages are entirely empty. CPU 0.04s/0.15u sec elapsed 0.20 sec. INFO: 00000: vacuuming "pg_toast.pg_toast_16737" INFO: 00000: index "pg_toast_16737_index" now contains 0 row versions in 1 pages DETAIL: 0 index row versions were removed. 0 index pages have been deleted, 0 are currently reusable. CPU 0.00s/0.00u sec elapsed 0.13 sec. INFO: 00000: "pg_toast_16737": found 0 removable, 0 nonremovable row versions in 0 out of 0 pages DETAIL: 0 dead row versions cannot be removed yet. There were 0 unused item pointers. Skipped 0 pages due to buffer pins. 0 pages are entirely empty. CPU 0.00s/0.00u sec elapsed 0.59 sec. INFO: 00000: analyzing "public.test" INFO: 00000: "test": scanned 10276 of 10276 pages, containing 90959 live rows and 702346 dead rows; 30000 rows in sample, 90959 estimated total row

问题原因

当我们开启一个事务后,为了实现多版本并发控制,数据库会阻止vacuum清理未结束的长事务之后产生的所有dead tuple,即使与该事务无关的表也是如此。对于未结束的长事务而言,之后产生的所有dead tuple对于该事务都是可见的,所以即使手动执行vacuum也无法进行清理。

  • Live transactions performing a write operation in any table will prevent vacuuming dead rows

generated by commited transactions that started after first live transaction in any other table.

解决方案

检查数据库中存在的长事务:

highgo=#selectusename,datname,state,waiting,xact_start,now(),query,pid,now()-xact_startastimefrompg_stat_activitywherenow()-xact_start>interval'5 sec'andquery!~'^COPY'andstate<>'idle'orderbyxact_start;-[RECORD1]-----------------------------------------------------------------------------------------------------------------------------------------------------------------usename|highgo datname|highgo state|idleintransactionwaiting|f xact_start|2018-07-0211:09:22.607884+08now|2018-07-0416:59:43.212717+08query|selectxxxxxxxx pid|17924time|2day05:50:26.909971

检查该SQL执行未结束的原因,如需尽快恢复前台应用,可以在确认安全的情况下使用如下命令,将该长事务终止。

SELECTpg_terminate_backend(17924);

再次对该表手动VACUUM:

highgo=# vacuum(verbose,analyze) test;

INFO: 00000: vacuuming “public.test”

INFO: 00000: scanned index “index_test_content_id” to remove 62482 row versions

DETAIL: CPU 0.01s/0.09u sec elapsed 0.26 sec

INFO: 00000: scanned index “test_pkey” to remove 62482 row versions

DETAIL: CPU 0.01s/0.08u sec elapsed 0.19 sec

INFO: 00000: “test”: removed 62482 row versions in 11041 pages

DETAIL: CPU 0.11s/1.30u sec elapsed 1.52 sec

INFO: 00000: index “index_test_content_id” now contains 91106 row versions in 698 pages

DETAIL: 62482 index row versions were removed.

346 index pages have been deleted, 152 are currently reusable.

CPU 0.00s/0.00u sec elapsed 0.01 sec.

INFO: 00000: index “test_pkey” now contains 91106 row versions in 568 pages

DETAIL: 62482 index row versions were removed.

244 index pages have been deleted, 50 are currently reusable.

CPU 0.00s/0.00u sec elapsed 0.00 sec.

INFO: 00000: “test”: found 781909 removable, 87305 nonremovable row versions in 11179 out of 11215 pages

DETAIL: 0 dead row versions cannot be removed yet.

There were 777839 unused item pointers.

Skipped 0 pages due to buffer pins.

0 pages are entirely empty.

CPU 0.32s/2.97u sec elapsed 3.96 sec.

INFO: 00000: vacuuming “pg_toast.pg_toast_16737”

INFO: 00000: index “pg_toast_16737_index” now contains 0 row versions in 1 pages

DETAIL: 0 index row versions were removed.

0 index pages have been deleted, 0 are currently reusable.

CPU 0.00s/0.00u sec elapsed 0.00 sec.

INFO: 00000: “pg_toast_16737”: found 0 removable, 0 nonremovable row versions in 0 out of 0 pages

DETAIL: 0 dead row versions cannot be removed yet.

There were 0 unused item pointers.

Skipped 0 pages due to buffer pins.

0 pages are entirely empty.

CPU 0.00s/0.00u sec elapsed 0.00 sec.

INFO: 00000: analyzing “public.test”

INFO: 00000: “test”: scanned 11215 of 11215 pages, containing 91106 live rows and 0 dead rows; 30000 rows in sample, 91106 estimated total rows

VACUUM

测试问题SQL,确保该问题不会再次发生。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/26 20:12:56

探索PFC开关电源仿真之全桥LLC

PFC开关电源仿真 全桥LLC 单相Boost PFC全桥LLC串联谐振开关电源Simulink/Matlab仿真模型&#xff0c;有详细解析说明。在电力电子领域&#xff0c;开关电源的设计与优化始终是热门话题。今天咱们就来唠唠单相Boost PFC全桥LLC串联谐振开关电源的Simulink/Matlab仿真模型。 一、…

作者头像 李华
网站建设 2026/2/26 9:25:32

2026 程序员前景盘点 + 就业 10 大方向一览,技能转型指南在此

编程作为IT行业中不可或缺的职位&#xff0c;人才需求量也是只增不减的&#xff0c;要问2023年程序员的职业发展前景如何&#xff0c;随着防疫政策的放开&#xff0c;市场经济也会逐渐复苏。如今大数据、人工智能、物联网等领域的崛起&#xff0c;必然会使程序员有着良好的发展…

作者头像 李华
网站建设 2026/2/26 6:57:10

在 VSCode 中配置 SSH 并实现 X11 转发:服务器程序远程桌面显示

在 VSCode 中配置 SSH 并实现 X11 转发&#xff08;Windows、macOS、Linux&#xff09; 你需要在VSCode中配置支持X11转发的SSH连接&#xff0c;实现远程运行带图形界面的程序、窗口能映射到本地显示的效果&#xff0c;核心需要完成本地X11服务搭建、远程服务器SSH配置开启X11…

作者头像 李华
网站建设 2026/2/26 8:22:20

一个退休程序员,用AI写了个AI叫Clawd,然后带火了Mac Mini

简单说&#xff0c;ClawdBot是一个可以跑在你自己电脑上的AI助手。但和ChatGPT、Claude这些不一样的是&#xff0c;它不只是跟你聊天&#xff0c;它能直接操作你的电脑。这两天刷Twitter&#xff0c;满屏都是一个叫ClawdBot的东西。一开始我还以为是Anthropic出的什么新产品&am…

作者头像 李华
网站建设 2026/2/23 18:01:36

计算机等级考试(二级WPS)---第4章:创建与处理演示文档---第2节:演示文稿的外观设计

目录 4.2.2 幻灯片背景设置及应用配色方案 1.纯色填充 2.渐变填充 3.图片填充 4.纹理填充 5.图案填充 6.配色方案 4.2.1 幻灯片母版设置和版式应用 1.幻灯片母版概述 2.幻灯片母版设置 (1)创建幻灯片母版 (2)创建讲义母版 (3)创建备注母版 (4)添加和删除…

作者头像 李华