PostgreSQL 的 VACUUM 与 VACUUM FULL 详解

PostgreSQL 的 VACUUM 与 VACUUM FULL 详解

一、基本概念对比

特性VACUUMVACUUM FULL
定义常规维护操作,清理死元组激进重组操作,完全重写表数据
锁级别不阻塞读写(共享锁)排他锁(阻塞所有操作)
空间回收只标记空间为可用,不返还OS空间返还操作系统
索引处理不重建索引完全重建所有索引
执行速度快(增量式)慢(全量重写)
对系统影响

二、工作机制详解

1. VACUUM 工作原理

  • 死元组清理:标记被删除或更新旧版本的数据为"可重用"
  • 事务ID处理:防止事务ID回卷(冻结旧事务ID)
  • 更新统计信息:为查询优化器提供最新数据分布信息
  • 不减少物理文件大小:只是内部空间重用

2. VACUUM FULL 工作原理

  1. 创建表的全新副本
  2. 只将有效数据写入新存储
  3. 删除原始表文件
  4. 将新文件重命名为原表名
  5. 完全重建所有索引(因为元组物理位置改变)

三、使用场景对比

适合使用 VACUUM 的场景

  • 常规数据库维护(建议配置autovacuum)
  • 高并发OLTP系统
  • 频繁更新的表(每天或每小时)
  • 只需要空间重用,不需OS空间回收

适合使用 VACUUM FULL 的场景

  • 表膨胀严重(>30%空间浪费)
  • 准备进行大版本升级前
  • 长期未维护的历史表
  • 需要彻底重组表物理结构时

四、性能影响分析

VACUUM 影响

-- 典型资源占用
CPU: 5-15% 
IO: 中等(取决于表大小)
锁: 不阻塞查询,可能与DDL冲突
持续时间: 几分钟到几小时(大表)

VACUUM FULL 影响

-- 典型资源占用
CPU: 30-70%
IO: 非常高(读写全表数据)
锁: 完全阻塞表访问
持续时间: 几小时到几天(特大表)

五、实际操作示例

基本语法

-- 普通VACUUM
VACUUM [VERBOSE] [ANALYZE] [table_name];
-- 示例
VACUUM VERBOSE ANALYZE orders;-- VACUUM FULL
VACUUM FULL [VERBOSE] [table_name];
-- 示例
VACUUM FULL VERBOSE large_table;

监控命令

-- 查看表膨胀情况
SELECTschemaname || '.' || relname AS table_name,pg_size_pretty(pg_total_relation_size(relid)) AS total_size,pg_size_pretty(pg_relation_size(relid)) AS data_size,n_live_tup AS live_tuples,n_dead_tup AS dead_tuples,round((n_dead_tup::numeric / (n_live_tup + n_dead_tup) * 100), 2) AS dead_tuple_percent,last_vacuum,last_autovacuum
FROM pg_stat_user_tables
WHERE n_live_tup > 0
ORDER BY dead_tuple_percent DESC;

六、最佳实践建议

  1. 常规维护策略

    • 启用并合理配置autovacuum
    • 对大表设置更频繁的vacuum阈值
    ALTER TABLE large_table SET (autovacuum_vacuum_scale_factor = 0.01,autovacuum_vacuum_threshold = 1000
    );
    
  2. VACUUM FULL 替代方案

    • 使用pg_repack扩展(在线重组,不阻塞读写)
    -- 安装后使用
    pg_repack -d dbname -t table_name
    
    • 手动创建新表交换(需要更多步骤)
  3. 特殊场景处理

    • 对于只读表,可以禁用autovacuum
    ALTER TABLE historical_data SET (autovacuum_enabled = false
    );
    
    • 紧急空间回收时考虑在维护窗口使用VACUUM FULL

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

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

相关文章

复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL)

视频讲解: 复刻低成本机械臂 SO-ARM100 舵机配置篇(WSL) 飞特舵机 组装之前需要配置舵机的ID,如下的网址为舵机的资料,实际上用不到,但可以mark在这里 Software-深圳飞特模型有限公司 User Guide里面可以…

Tailwind CSS实战技巧:从核心类到高效开发

使用 Kooboo平台 训练实战技巧,无需配置安装,直接引入CDN就可以在线练习了!具体操作流程:进入Kooboo后,选择创建空白站点 -> 站点开发 -> 控制面板 -> 页面 ->新建普通页面 -> 编写代码 一、核心布局类…

【LINUX操作系统】线程操作

了解了线程的基本原理之后,我们来学习线程在C语言官方库中的写法与用法。 1. 常见pthread接口及其背后逻辑 1.1 pthread_create 与线程有关的函数构成了⼀个完整的系列,绝⼤多数函数的名字都是以“pthread_”打头的 • 要使⽤这些函数库,…

【AI面试准备】Azure DevOps沙箱实验全流程详解

介绍动手实验:通过 Azure DevOps 沙箱环境实操,体验从代码提交到测试筛选的全流程。如何快速掌握,以及在实际工作中如何运用。 通过 Azure DevOps 沙箱环境进行动手实验,是快速掌握 DevOps 全流程(从代码提交到测试筛选…

VulnHub-DC-2靶机

主机发现 sudo arp-scan -l 以sudo管理员权限扫描本地活动ip地址 Interface: eth0, type: EN10MB, MAC: 08:00:27:22:46:4f, IPv4: 192.168.252.230 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.252.6 4c:5f:70:74:3c:3b …

藏语英语中文机器翻译入门实践

🎯 项目目标: 输入藏文句子,自动翻译成英文和中文(或输入中文,翻译为英文和藏文)。 🔍 技术与原理简介 机器翻译(Machine Translation, MT)是人工智能中自然语言处理&a…

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(上篇)

练习题 【单选题】在自然语言处理的法务咨询场景中,以下哪种模型选择最为合适? A. 通用大语言模型 B. 经过数学领域微调的模型 C. 面向法律领域训练的模型 D. 视觉模型 【多选题】以下哪些属于模型非功能性需求?( ) A. 模型对不同语言的支持能力 B. 模型的响应速度要求 C.…

WPF之ProgressBar控件详解

文章目录 1. ProgressBar控件简介2. ProgressBar的基本属性和用法2.1 基本属性2.2 基本用法2.3 代码中修改进度 3. 确定与不确定模式3.1 确定模式(Determinate)3.2 不确定模式(Indeterminate) 4. 在多线程环境中更新ProgressBar4.…

IntelliJ IDEA 保姆级安装教程(附安装包)

文章目录 一、下载二、安装三、启动 一、下载 Ultimate 2021.1.1 - Windows x64 (exe) 二、安装 三、启动 首次安装启动 非首次安装启动

Performance API 性能上报

以下是关于 Performance API 性能上报的基本知识点总结: 一、性能监控核心指标体系 1. 关键性能指标(Web Vitals) 指标标准采集方式健康阈值LCP (最大内容绘制)测量加载性能PerformanceObserver≤2.5sFID (首次输入延迟)测量交互响应PerformanceObserver≤100msCLS (累积布…

C语言-指针(一)

目录 指针 内存 概念 指针变量 取地址操作符(&) 操作符“ * ” 指针变量的大小 注意 指针类型的意义 作用 void * 指针 const修饰指针变量 const放在*前 const放在*后 双重const修饰 指针的运算 1.指针 - 整数 2.指针 - 指针 3.指…

华为云Astro大屏连接器创建操作实例:抽取物联网iotda影子设备数据的连接器创建

目录 样图(API连接器创建成功) 说明 操作场景(以Astro大屏抽取iotda影子参数为例) 实际操作步骤 新建连接器 设置基本信息。 接口鉴权方式,支持API鉴权、AK/SK、API Key和无身份验证 无身份验证 AK/SK认证(目前暂不能用) API Key认证(第三方使用) API鉴权认…

【硬件系统架构】哈佛架构

一、引言 在计算机科学的浩瀚宇宙中,计算机体系结构犹如星辰般繁多且各有独特光芒。哈佛架构便是其中一颗耀眼的明星,它在众多计算机体系结构中占据着独特而重要的地位。从计算机技术的萌芽期一路走来,哈佛架构不断发展演变,在不同…

华为eNSP:IS-IS认证

一、什么是IS-IS认证? 华为eNSP中的IS-IS认证 IS-IS认证是华为eNSP网络中用于保障中间系统到中间系统(IS-IS)协议通信安全性的核心机制,通过身份验证和数据完整性校验防止非法路由信息注入或篡改。其实现方式与关键特性如下&…

如何创建并使用极狐GitLab 项目访问令牌?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目访问令牌 在极狐GitLab 16.1中引入添加了默认前缀。 项目访问令牌类似于密码,但你可以 限制访问资源&#xf…

C# 异步详解

C# 异步编程详解 一、异步编程基础概念 1. 同步 vs 异步 ​​同步(Synchronous)​​:任务按顺序执行,前一个任务完成后才会执行下一个​​异步(Asynchronous)​​:任务可以非阻塞地启动,主线程可以继续执行其他操作 2. 异步编…

C++ 之 【模拟实现 list(节点、迭代器、常见接口)】(将三个模板放在同一个命名空间就实现 list 啦)

1.前提准备 (1) list 的底层结构一般是带头双向循环链表 (1)为避免命名冲突&#xff0c;需要创建一个命名空间来存放模拟实现的 list (2)下面模拟实现list时&#xff0c;声明和定义不分离(具体原因后续讲解) 2.完整实现 2.1 链表节点 template<class T>//节点写成类模板…

解决Win10虚拟机“网络连接不上”,“Ethernet0 网络电缆被拔出”的问题

一、情景引入 今天用Win10虚拟机打开浏览器发现&#xff1a; 很奇怪&#xff0c;平常都没有这个问题。 二、检查网络状态 点击更改适配器选项&#xff0c;发现如下&#xff1a; 三、解决问题 打开任务管理器&#xff0c;点击服务&#xff0c;搜索栏搜索&#xff1a;VM …

2025蓝桥杯省赛网络安全组wp

文章目录 黑客密室逃脱ezEvtxflowzipEnigma星际xml解析器EBC-TrainAES-CBC 黑客密室逃脱 提示猜文件名&#xff0c;猜几个常见的&#xff0c;app.py读到源码 这里也是脑抽了一下&#xff0c;把密钥看成1236了。。。卡了五分钟左右&#xff0c;解出来的时候已经降到300多分了&a…

算法查找目录

1. 基础数据结构 数组与链表 动态数组 实现与自动扩容机制均摊分析ArrayList/Vector实现 单向链表 基本操作(插入、删除、查找)链表反转环检测(Floyd判圈算法) 双向链表 插入删除操作优化双向遍历优势边界情况处理 循环链表 约瑟夫环问题单向循环链表双向循环链表 跳表 基本原…