当前位置: 首页 > news >正文

dav_pg8_vacuum

一、VACUUM基础概念 

1.1 VACUUM的作用


在PostgreSQL中,当数据被更新或删除时,系统并不会立即释放物理空间,而是将其标记为 “可重用”。
随着时间推移,表中的死元组(已删除或已被新版本覆盖的数据)会越来越多,这 不仅会导致存储空间利用率下降,也可能影响查询性能,因为查询需要遍历这些无用的元组。
而 VACUUM命令的主要任务就是清理这些死元组,并回收相应的存储空间。

1.2 VACUUM的工作方式


执行VACUUM命令后,PostgreSQL会扫描表并: 
   ◦ 删除无效的行版本
   ◦ 更新表的统计信息以提高查询计划器的准确性
   ◦ 如果启用了 autovacuum_freeze_max_age 参数,还会防止事务ID过多导致的老化问题
对于支持MVCC(多版本并发控制)的PostgreSQL,VACUUM还负责冻结旧的事务ID,确保事 务可见性信息的有效管理。


二、VACUUM类型


2.1 VACUUM常规操作

普通的VACUUM命令仅能清除无效行版本和更新统计信息,但不能完全压缩表以释放磁盘空间。
VACUUM table_name;

2.2 VACUUM FULL操作

VACUUM FULL则更为激进,它不仅执行常规VACUUM的功能,还能彻底整理表,使其占用的 空间最小化,类似于重建表的效果。但需要注意的是,VACUUM FULL会锁定整个表,在大表上可能造成较长时间的阻塞。
VACUUM FULL table_name;

2.3 自动Vacuum(Autovacuum)

为了减轻手动执行VACUUM的压力,PostgreSQL提供了Autovacuum后台进程,可以根据配置自动定期执行VACUUM。
Autovacuum能够监控表的更新情况,并在满足一定条件时自动触 发VACUUM操作。

三、VACUUM回收过程实践


为了直观地理解PostgreSQL的VACUUM操作,我们可以进行以下实验:

3.1:创建并填充测试表


-- 创建一个用于实验的表,并插入数据

-- 填充10,000行数据

-- 记录初始表大小(以字节为单位)

可以看到表初始分配大小 6704KB;

3.2 执行更新和删除操作以产生死元组

-- 执行大量更新操作,模拟事务更新

-- 执行删除操作,生成被删除但未释放空间的数据

3.3 执行常规VACUUM


-- 执行常规VACUUM命令

3.4 查询pg_stat_user_tables视图观察影响

-- 查看`n_dead_tup`字段的变化,它反映了表中的死元组数量

3.5 执行VACUUM FULL

注意:在生产环境中应谨慎使用VACUUM FULL,因为它可能导致表锁定并在大表上消耗较长时间。
-- 执行VACUUM FULL,此操作会整理表空间并回收所有废弃空间

3.6 配置和观察Autovacuum行为

配置表的变化量而触发autovacuum行为;

先到这里,后面有时间再继续分析;

http://www.dtcms.com/a/99411.html

相关文章:

  • c#的.Net Framework 的console 项目找不到System.Window.Forms 引用
  • VMware中新建Ubuntu虚拟机系统,并安装Anaconda
  • 1--当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南(知识点讲解版)
  • Android Architecture Components 深入解析
  • 【力扣刷题|第十七天】0-1 背包 完全背包
  • Linux进程管理的相关知识点以及我的相关笔记链接
  • 算法为舟 思想为楫:AI时代,创作何为?
  • Redis的ZSet有序集合
  • 深度剖析:U盘突然无法访问的数据拯救之道
  • 27. 移除元素【数组专题】Java\Python\JS\Go\C++
  • IP综合实验
  • 曲线拟合 | Matlab基于贝叶斯多项式的曲线拟合
  • Docker, Docker 镜像是什么,怎么创建, Docker有什么用
  • 微服务架构中的精妙设计:SpringCloud的概述
  • Dust3r、Mast3r、Fast3r
  • 信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport
  • VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶三
  • 【C++初阶】---类和对象(下)
  • 每日一题之修建灌木
  • 2D视觉系统选型(待补充)
  • DHCP报文的详细流程
  • 高精度十进制数运算
  • Python库()
  • 【人工智能之大模型】哪些因素会导致大语言模型LLM的偏见?
  • 淘宝店铺清单及全商品数据、关键词检索 API 介绍
  • 金融级密码管理器——跨设备同步的端到端加密方案
  • [创业之路-343]:创业:一场认知重构与组织进化的双向奔赴
  • c++第三课(基础c)
  • 网页设计思路
  • 论文阅读笔记——ReconDreamer