← 中文资源

简体中文版本

验证分区裁剪是否有效

确认查询按分区键过滤、规划器裁掉无关分区,并用 EXPLAIN 与运行时统计加以验证。

阅读英文原文

概述

为性能建了分区表,却因为过滤条件未命中分区键而依旧扫描所有分区,是常见误区。裁剪不是自动的,必须让查询在分区键上给出规划器可推导的取值。

关键步骤

  1. 对生产查询运行 EXPLAIN ANALYZE,查看出现哪些分区。
  2. 确认 WHERE 在分区键上使用常量或稳定表达式。
  3. 检查参数化查询是否会因计划期未知取值而破坏裁剪。
  4. 让每个分区的索引与过滤列对齐。

验证

  • 计划中不出现被裁剪掉的分区。
  • 存活分区使用索引而非扫描。
  • 参数化查询在运行时仍能裁剪。
  • 查询范围与分区边界对齐。

注意事项

  • 只有查询限定分区键时裁剪才有帮助;宽泛分析查询仍会触及大量分区。
  • 过度分区会增加规划时间与目录开销,却不会为宽查询改善裁剪。

适用范围

本条目围绕「验证分区裁剪是否有效」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM metrics
WHERE ts >= now() - interval '1 day'
  AND name = 'cpu';
-- the plan should mention only the current partitions