## 概述 分区可以按时间或键拆分大表, 实现裁剪与维护隔离。结合Autovacuum参数与定期维护窗口, 保持统计与存储健康, 降低全表操作代价。 ## 关键实践与参数 - 分区类型: RANGE按时间, HASH按键分布 - 索引策略: 局部索引覆盖常用查询 - 维护窗口: 在低峰期执行 `ANALYZE` `REINDEX` 与归档 - Autovacuum: 调整阈值与比例参数以适配写入吞吐 ## 示例/配置/实现 ```sql CREATE TABLE orders ( id BIGSERIAL PRIMARY KEY, customer_id BIGINT NOT NULL, status TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL ) PARTITION BY RANGE (created_at); CREATE TABLE orders_2025_11 PARTITION OF orders FOR VALUES FROM ('2025-11-01') TO ('2025-12-01'); CREATE INDEX idx_orders_2025_11_cust_status_created ON orders_2025_11 (customer_id, status, created_at DESC); ALTER TABLE orders_2025_11 SET ( autovacuum_vacuum_scale_factor = 0.05, autovacuum_analyze_scale_factor = 0.05 ); EXPLAIN ANALYZE SELECT id, status FROM orders WHERE created_at >= '2025-11-15' AND created_at < '2025-11-30' AND customer_id = 123 ORDER BY created_at DESC LIMIT 50; ``` ## 验证 - 分区裁剪: `EXPLAIN` 显示仅命中目标分区, 全表扫描减少 - 索引命中: 记录返回行与扫描行比例改善 - Autovacuum效果: 观察表与索引膨胀与统计更新及时 - 维护窗口: 在指定窗口执行维护, 峰值期间无显著影响 ## 注意事项 - 分区边界需与业务时间粒度对齐 - 定期创建与卸载过期分区以控制数据量 - 局部索引需随新分区创建同步 - 关注写入高峰下的Autovacuum竞争

发表评论 取消回复