全部文章
PostgreSQL Howto 中文版 · 111 篇文章。按主归属专题排列,保留原始来源与验证说明。
查询性能与观测
- PostgreSQL 优化器提示:怎样干预和稳定执行计划
- 一条坏 SQL 会拖垮 PostgreSQL 吗?理解查询内存与故障隔离
- PostgreSQL 性能排查:规划开销、分区锁与表膨胀
- EXPLAIN 为什么应该带 BUFFERS
- pg_stat_statements 入门
- pg_stat_statements 进阶
- pg_stat_statements 深入使用
- 使用 FlameGraph 和 eBPF/perf 排查性能
- 临时监控方法
- 为 pg_stat_statements 找到真实 SQL 样例
- 如何做基准测试
- 如何判断一个查询是否太慢
- 基准测试迭代前后的准备工作
- 让非生产环境 Planner 更像生产环境
- OLTP 粗略配置调优
- work_mem 调优
- 运行 ANALYZE 收集统计信息
运维排障与日常工具
- 排查并加速 Postgres 停止和重启
- 排查 Postgres 启动缓慢
- 加速大库 pg_dump
- 导入 CSV 到 Postgres
- 使用 pg_restore
- 不发额外查询设置 application_name
- 如何退出 psql
- 在 Ubuntu 22.04 编译 Postgres
- 初步配置调优
- 安装带 plpython3u 的 Postgres 16
- 在 psql 脚本中使用变量
- 通过观察 psql 学习元数据
- 使用 Docker 运行 Postgres
- psql 调优
- psql 快捷操作
- 在 psql 中绘图
- 修复 psql 中的 \\e 编辑器问题
- 修改数据库中所有对象所有者
- 面向 OLTP 的 Linux 参数调优
- 使用 lib_pgquery 归一化和匹配查询
- 格式化 psql 脚本文本输出
锁、事务与在线变更
- 外键写入为什么会变慢:理解 PostgreSQL 的 MultiXact 与长事务
- SQL 很快,事务却在排队:PostgreSQL OLTP 锁竞争
- 如何安全执行 PostgreSQL 在线变更:DDL、数据回填与批量删除
- 如何排查 LISTEN/NOTIFY 引起的提交阻塞
- heavyweight locks 分析:基础
- 处理 OLTP 长事务
- 无停机重定义主键
- 使用子事务
- 单条查询实现 find-or-insert
- 无停机启用 data checksums
- heavyweight locks 分析:锁树
- 删除列
- 添加列
- 无停机添加 CHECK 约束
- 添加外键
- 理解 DDL 被什么阻塞
- 移除外键
- heavyweight locks 分析:持久监控
- 修改 Postgres 参数
索引治理
存储、WAL 与 Vacuum
- Autovacuum 为什么跟不上:清理受阻、任务积压与执行缓慢
- 理解 tuple 在表中的稀疏存储
- 理解 LSN 和 WAL 文件名
- 容易踩坑的 Postgres 特性
- 检查 btree 索引损坏
- 排查 pg_wal 目录增长
- 如何破坏数据库:制造损坏
- 如何破坏数据库:模拟 XID 回卷
- 如何破坏数据库:有害负载
- 监控 XID 回卷风险
- 监控 xmin horizon 避免回卷和膨胀
- 处理 bloat
- 降低 WAL 生成速率
- 一个 page 能插入多少 tuple
- Autovacuum 队列和进度
- 刷新 OS page cache 和 Postgres buffer pool
- 查找有 int4 主键溢出风险的表
- 列顺序与存储优化:Column Tetris
- 快速检查值的数据类型和存储大小