Andy Atkinson

1 篇内容

工程实践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 操作的安全执行中。