Andy Atkinson

2 篇内容

工程实践Andy Atkinson

PostgreSQL 18: 23x Faster Inserts With UUID V7

文章记录了生产环境中将PostgreSQL主键从UUID v1/v4迁移到UUID v7后获得的性能收益。作者在Postgres 18.4上通过alter table修改列默认值为uuidv7(),针对部分高频插入表观察到平均插入耗时最多降低23倍,并以表格形式列出6x、8x、9x、20x、23x五档提升案例。文中解释了随机UUID(v4)导致B-tree索引页分裂、缓存命中率下降的机制,对比v7单调递增带来的热页优势;同时重点讨论了在线切换的难点——ALTER TABLE需要ACCESS EXCLUSIVE锁,作者通过设置lock_timeout和statement_timeout配合PL/pgSQL循环重试(带抖动退避)找到了锁窗口,并预告了取消阻塞查询的预案。文章最后指出v7时间戳会暴露记录创建时间这一隐私边界,以及该方案并非对所有表都有效。

这是一篇真实、可验证的PostgreSQL性能优化工程案例,提供了从性能问题分析、方案选型、锁管理到线上实施验证的完整链路。适合使用PostgreSQL并关心写入性能或在线DDL的DBA与后端工程师,文中的锁超时加重试策略和UUID选择依据可以直接迁移到类似系统。

工程实践Andy Atkinson

Adding and Removing Big Indexes in PostgreSQL

文章介绍了在 PostgreSQL 大型表上安全添加和删除大索引的完整操作方案。针对创建索引可能持续数小时且需与线上查询并发执行的场景,作者详细说明了使用 CONCURRENTLY 选项避免写操作阻塞、设置 lock_timeout 和 statement_timeout 保护、在 screen/tmux 后台运行、通过特殊查询监控多阶段进度(扫描堆、排序元组、加载元组等)以及调整 maintenance_work_mem 和 max_parallel_maintenance_workers 优化资源的具体方法;同时提供了失败后清理 invalid 索引和处理唯一性限制的注意事项,并给出了最终可直接执行的命令模板。文中基于真实操作给出了各阶段耗时(总计约 6 小时)和性能特征,但方案仅适用于非分区表,且要求手动监控和串行执行并发构建。

推荐收录,因为它不是简单的语法介绍,而是生产环境中管理大表索引的实战手册,包含锁定超时、语句超时、并行度设置、进度监控查询等可复用的工程实践。适合数据库管理员、PostgreSQL 运维人员和后端工程师参考,文中的参数调整思路和阶段监控方法可直接迁移到其他长时 DDL 操作的安全执行中。