讲师中心 微信公众号
AI工具推荐 视频效率加速

PostgreSQL VACUUM / ANALYZE 的自动与手动执行时机

浅晨大大_7966

浅晨大大_7966

发布时间:2026-02-07 19:38:02

|

827人浏览过

|

来源于php中文网

原创

PostgreSQL 在 autovacuum 启用时,当死元组数 ≥ threshold + scale_factor × 总行数,或变更行数达 analyze 阈值,或事务 ID 接近 autovacuum_freeze_max_age 限制时,自动触发 VACUUM 或 ANALYZE;但 UNLOGGED 表、临时表及系统表(未显式启用)除外。

postgresql vacuum / analyze 的自动与手动执行时机

什么时候 PostgreSQL 会自动触发 VACUUM 和 ANALYZE

PostgreSQL 默认开启 autovacuum,只要表有足够多的死元组(dead tuples)或统计信息过期,就会自动调度 VACUUM 和 ANALYZE。但“足够多”不是固定行数,而是基于几个动态阈值计算出来的:

  • autovacuum_vacuum_threshold(默认 50)+ autovacuum_vacuum_scale_factor(默认 0.2)→ 触发 VACUUM 的死元组下限 = threshold + scale_factor × 表总行数
  • autovacuum_analyze_threshold(默认 50)+ autovacuum_analyze_scale_factor(默认 0.1)→ 触发 ANALYZE 的变更行数下限同理
  • 实际是否运行还受 autovacuum_freeze_max_age(默认 2 亿事务)约束:哪怕没改数据,只要事务 ID 快耗尽,也会强制 VACUUM

注意:autovacuum 不会为 UNLOGGED 表或临时表运行,也不处理系统表(除非显式配置 autovacuum_enabled = on)。

哪些场景必须手动执行 VACUUM / ANALYZE

自动机制有延迟、有保守性,以下情况无法等待:

  • 刚批量 DELETE 或 UPDATE 掉表 80% 以上数据,但表仍很大 → 死元组堆积严重,查询可能变慢,空间不释放
  • 执行完大批次 INSERT 后立刻做复杂查询 → 优化器还没拿到新数据分布统计,容易选错执行计划
  • pg_stat_all_tables.n_dead_tup 持续高于 pg_class.reltuples × 0.2,且 last_autovacuum 时间很久 → 自动进程被阻塞或配置过松
  • 升级 PostgreSQL 小版本后首次启库 → 建议对所有用户表跑一次 VACUUM ANALYZE,避免旧统计残留影响

手动命令最常用组合是 VACUUM (VERBOSE, ANALYZE) table_name,加 VERBOSE 能看到实际清理了多少行、是否触发了冻结(freeze)。

Web Accessibility (WCAG 2 AA))
Web Accessibility (WCAG 2 AA))

将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。

下载

VACUUM FULL 和普通 VACUUM 的关键区别

VACUUM FULL 不是“更彻底的 VACUUM”,而是完全不同的操作——它会重写整个表并重建索引,释放磁盘空间,但代价极高:

  • 需要 ACCESS EXCLUSIVE 锁,阻塞所有读写
  • 全程占用双倍磁盘空间(新旧表同时存在)
  • 不会跳过未修改的页,即使表只有几行变更也要全量重写
  • 不推荐在业务高峰期执行;日常维护优先用普通 VACUUM + 调整 autovacuum_vacuum_cost_limit 加速

真正需要 VACUUM FULL 的典型场景极少:比如某张表长期只删不插,pg_total_relation_size() 居高不下,且确认没有长事务或复制槽拖慢普通 VACUUM 进度。

ANALYZE 的采样逻辑和精度控制

ANALYZE 默认对每列按数据分布做采样,不是全表扫描。采样行数由 default_statistics_target(默认 100)控制,但实际采样量还取决于表大小和列基数:

  • 小表(default_statistics_target × 列数 条统计样本
  • 如果某列常用于 WHERE 或 JOIN 条件但基数极高(如 UUID),默认采样可能不够准 → 可单独提高该列目标:ALTER TABLE t ALTER COLUMN c SET STATISTICS 500
  • 执行 ANALYZE 时加 (SAMPLE_RATE 0.5) 可强制指定采样率,但需谨慎:过低导致统计失真,过高增加 I/O 开销

一个容易被忽略的点:ANALYZE 不会更新 pg_class.reltuples(估算总行数),这个值只在 VACUUM 或 ANALYZE 带 VERBOSE 时顺带更新;若依赖它做容量预估,得确保定期触发含 VERBOSE 的分析。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4783

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

971

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1249

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6801

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3503

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6780

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9401

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1270

2024.04.29

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 7.6万人学习

DBeaver生态工具dbvr官方手册
DBeaver生态工具dbvr官方手册

共0课时 | 0人学习

DBeaver事务控制指南
DBeaver事务控制指南

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn