小红花·文摘
  • 首页
  • AI Tokens🪙
  • 排行榜🏆
  • 直播
  • FAQ
每次更新都会留下幽灵:PostgreSQL中的MVCC、膨胀与VACUUM

PostgreSQL通过MVCC实现多版本并发控制,每次更新会保留旧版本元组,导致表膨胀。事务使用XID和命令ID跟踪可见性,快照隔离决定数据可见性。VACUUM清理死元组,但受事务地平线限制,长事务会阻止清理。子事务和HOT链影响清理效率,需定期维护以避免性能下降。

每次更新都会留下幽灵:PostgreSQL中的MVCC、膨胀与VACUUM

PlanetScale - Blog PlanetScale - Blog · 2026-07-20T00:00:00Z
Radim Marek:页面级别的VACUUM

本文讨论了PostgreSQL中的VACUUM过程,包括堆扫描、索引清理和堆清理三个阶段。VACUUM通过清理死元组和更新可见性图来回收空间,提高数据库性能。文章还强调了VACUUM与VACUUM FULL的区别,后者用于压缩文件大小。

Radim Marek:页面级别的VACUUM

Planet PostgreSQL Planet PostgreSQL · 2026-07-05T14:31:03Z
Shinya Kato:5种常见的PostgreSQL锁行为导致的困扰

PostgreSQL的锁机制可能导致阻塞和死锁。文章讨论了五种常见的锁行为,包括ACCESS EXCLUSIVE锁的排队、外键约束引发的隐性死锁、唯一约束检查导致的死锁、自动清理的特殊行为以及VACUUM的隐藏ACCESS EXCLUSIVE阶段。建议通过设置锁超时和监控活动来减轻这些问题。

Shinya Kato:5种常见的PostgreSQL锁行为导致的困扰

Planet PostgreSQL Planet PostgreSQL · 2026-05-26T20:00:00Z

Autovacuum's most powerful tuning lever: the scale factor that determines when dead tuples trigger a vacuum. On large tables, the 20% default waits too long.

Christophe Pettus: All Your GUCs in a Row: autovacuum_vacuum_scale_factor and autovacuum_vacuum_threshold

Planet PostgreSQL Planet PostgreSQL · 2026-05-10T01:00:00Z

PostgreSQL 18 finally fixes the autovacuum formula that left billion-row tables waiting for 200M dead tuples.

Christophe Pettus: All Your GUCs in a Row: autovacuum_vacuum_max_threshold

Planet PostgreSQL Planet PostgreSQL · 2026-05-09T01:00:00Z

PostgreSQL 13 added insert-triggered autovacuum to solve a critical problem: append-only tables never vacuumed, breaking index-only scans and delaying tuple…

Christophe Pettus: All Your GUCs in a Row: autovacuum_vacuum_insert_scale_factor and autovacuum_vacuum_insert_threshold

Planet PostgreSQL Planet PostgreSQL · 2026-05-08T01:00:00Z

Three autovacuum parameters control how often PostgreSQL vacuums, how hard it works, and how long it pauses.

Christophe Pettus: All Your GUCs in a Row: autovacuum_naptime, autovacuum_vacuum_cost_delay, autovacuum_vacuum_cost_limit

Planet PostgreSQL Planet PostgreSQL · 2026-05-07T01:00:00Z
拉迪姆·马雷克:逐字解析PostgreSQL的多版本并发控制(MVCC)

PostgreSQL的多版本并发控制(MVCC)允许读者和写者并行操作而不互相阻塞。每个元组包含两个事务ID(t_xmin和t_xmax),用于确定可见性。更新操作创建新版本并标记旧版本,VACUUM负责清理无效元组,但长时间运行的事务可能会阻止清理,导致空间浪费。不同的隔离级别影响快照的捕获时机,从而影响查询结果。

拉迪姆·马雷克:逐字解析PostgreSQL的多版本并发控制(MVCC)

Planet PostgreSQL Planet PostgreSQL · 2026-04-17T13:15:59Z
加藤信也:PostgreSQL中表膨胀的四个原因及其解决方法

PostgreSQL中的表膨胀是由于UPDATE或DELETE操作产生的“死元组”未被VACUUM回收,导致数据文件增大。造成膨胀的原因包括长时间运行的事务、未提交的准备事务、启用hot_standby_feedback的备用服务器查询和逻辑复制延迟。解决方法是终止阻止VACUUM的事务或查询。

加藤信也:PostgreSQL中表膨胀的四个原因及其解决方法

Planet PostgreSQL Planet PostgreSQL · 2026-01-20T08:55:13Z
Radim Marek: VACUUM是个谎言(关于你的索引)

许多开发者误以为运行VACUUM可以保持PostgreSQL数据库健康,但VACUUM只能删除死元组,无法重组B树索引,导致索引膨胀。处理堆膨胀适合使用VACUUM,而索引膨胀则需手动使用REINDEX。应监控索引状态,及时处理膨胀问题。

Radim Marek: VACUUM是个谎言(关于你的索引)

Planet PostgreSQL Planet PostgreSQL · 2025-12-11T23:30:53Z
Laurenz Albe:如何处理“数据库不接受命令”错误

PostgreSQL中的“数据库不接受命令”错误通常与事务ID环绕有关。解决方法包括处理旧的准备事务、结束长时间运行的事务、删除过期的复制槽,并执行VACUUM命令。避免使用单用户模式和VACUUM FULL,以减少停机时间,并确保自动清理配置正确,以防未来问题。

Laurenz Albe:如何处理“数据库不接受命令”错误

Planet PostgreSQL Planet PostgreSQL · 2025-09-16T06:00:42Z
克里斯托夫·贝尔格:一次充满惊喜的维也纳之旅

我从杜塞尔多夫机场出发前往pgday.at,因技术问题延误,但最终顺利抵达维也纳。在会议上,我意外成为演讲者,分享了现代PostgreSQL VACUUM的内容。活动精彩,结识了许多社区成员,最后在博物馆度过了愉快的早晨。

克里斯托夫·贝尔格:一次充满惊喜的维也纳之旅

Planet PostgreSQL Planet PostgreSQL · 2025-09-11T05:43:06Z
克里斯托夫·贝尔格:从VACUUM到德国铁路:PGConf.DE 2025上最意想不到的时刻

在PGConf.DE会议前,我参加了汉堡的Debian MiniDebConf,随后前往柏林。会议吸引了340名与会者,讨论了PostgreSQL的VACUUM演变、现代SSL和高可用性策略等主题,促进了社区交流。尽管回程遇到交通堵塞,但整体经历丰富而有意义。

克里斯托夫·贝尔格:从VACUUM到德国铁路:PGConf.DE 2025上最意想不到的时刻

Planet PostgreSQL Planet PostgreSQL · 2025-05-14T13:31:56Z

I am (slowly) adding handy PostgreSQL queries to my GitHub, and Vacuum is the newest category.  The end goal is to have a compilation of queries for those of us who need to keep an instance...

Dave Stokes: Queries on Vacuum

Planet PostgreSQL Planet PostgreSQL · 2025-04-30T15:22:00Z
Grant Fritchey:PostgreSQL中的多版本并发控制(MVCC):与Grant一起学习PostgreSQL

PostgreSQL通过多版本并发控制(MVCC)实现ACID属性,确保读取和写入操作不互相阻塞。MVCC利用事务ID创建数据快照,支持已提交读、可重复读和可串行化三种隔离级别。VACUUM过程负责清理逻辑删除的行,以维护数据库性能。

Grant Fritchey:PostgreSQL中的多版本并发控制(MVCC):与Grant一起学习PostgreSQL

Planet PostgreSQL Planet PostgreSQL · 2025-04-02T20:52:05Z
PostgreSQL性能问题的三大关键:诊断与有效解决方案

缺乏索引是PostgreSQL查询缓慢的主要原因,可能导致全表扫描。通过在相关列上创建索引、定期执行VACUUM清理无效数据、优化查询结构和选择合适的索引类型,可以显著提升查询性能。

PostgreSQL性能问题的三大关键:诊断与有效解决方案

DEV Community DEV Community · 2025-03-16T18:29:44Z

2025年2月14日,Nathan Bossart提交补丁,增加了VACUUM/ANALYZE(VERBOSE)和自动清理日志的延迟时间信息,更新了pg_stat_progress_vacuum和pg_stat_progress_analyze视图,并在VACUUM和ANALYZE的输出中显示。

Hubert 'depesz' Lubaczewski:等待 PostgreSQL 18 – 为 VACUUM/ANALYZE(VERBOSE)和自动清理日志添加延迟时间

Planet PostgreSQL Planet PostgreSQL · 2025-02-19T11:40:10Z

2025年2月11日,Nathan Bossart提交补丁,向pg_stat_progress_vacuum和pg_stat_progress_analyze视图添加了基于成本的延迟时间。新增参数track_cost_delay_timing用于收集信息,显示vacuum因成本延迟而睡眠的时间,增强了进度监控的细节。

Hubert 'depesz' Lubaczewski:等待 PostgreSQL 18 - 向进度视图添加基于成本的延迟时间

Planet PostgreSQL Planet PostgreSQL · 2025-02-13T17:57:02Z
Laurenz Albe:处理PostgreSQL错误“发现xmin ... 在relfrozenxid之前...”

PostgreSQL中的错误“found xmin ... from before relfrozenxid ...”表示数据损坏。表的xmin与relfrozenxid需一致,否则VACUUM操作会失败,可能导致数据丢失。解决方法包括导出恢复表、手动更新relfrozenxid或使用pg_surgery扩展。

Laurenz Albe:处理PostgreSQL错误“发现xmin ... 在relfrozenxid之前...”

Planet PostgreSQL Planet PostgreSQL · 2025-02-11T05:00:00Z

PostgreSQL 12引入了VACUUM命令的INDEX_CLEANUP选项,但不建议使用。该选项会导致无法清理索引中的死元组,影响查询性能,虽然可以加快速度,但会导致表和索引膨胀。除非紧急情况,否则应避免使用。

克里斯托夫·佩图斯:VACUUM(INDEX_CLEANUP 关闭)被认为有害

Planet PostgreSQL Planet PostgreSQL · 2025-01-28T15:16:53Z
  • <<
  • <
  • 1 (current)
  • 2
  • 3
  • >
  • >>
👤 个人中心
在公众号发送验证码完成验证
登录验证
在本设备完成一次验证即可继续使用

完成下面两步后,将自动完成登录并继续当前操作。

1 关注公众号
小红花技术领袖公众号二维码
小红花技术领袖
如果当前 App 无法识别二维码,请在微信搜索并关注该公众号
2 发送验证码
在公众号对话中发送下面 4 位验证码
小红花技术领袖俱乐部
小红花·文摘:汇聚分发优质内容
小红花技术领袖俱乐部
Copyright © 2021-
粤ICP备2022094092号-1
公众号 小红花技术领袖俱乐部公众号二维码
视频号 小红花技术领袖俱乐部视频号二维码