← 中文资源

简体中文版本

测量 PostgreSQL 索引膨胀

用 pgstattuple 与统计估算索引膨胀,判断 REINDEX 是否值得其锁代价。

阅读英文原文

目标

索引看起来远大于其覆盖的数据,但没人能说清到底浪费了多少空间。本配方安装 pgstattuple 扩展并采样目标索引,读取叶密度与空闲空间得到膨胀估算,再与表体积对比,判断低基数索引接近表体积即为膨胀信号,从而在安排 REINDEX 前有量化依据,并提醒并发重建需要额外磁盘。

步骤要点

  1. 安装 pgstattuple 扩展并采样候选索引。
  2. 把索引体积与其支撑的表体积对比。
  3. 流量低时运行,或使用 pgstatindex 快速估算。
  4. 若确有膨胀,评估并发重建所需的磁盘与时间。
CREATE EXTENSION IF NOT EXISTS pgstattuple;
SELECT * FROM pgstatindex('public.idx_events_created');

排错提示

  • 活跃写入的索引估算会有噪声。
  • REINDEX CONCURRENTLY 需要额外磁盘和时间。
  • 不覆盖表膨胀等其他来源。

适用边界

  • 估算在频繁写入时不稳定。
  • 不覆盖表膨胀问题。