PostgreSQL 19 引入了 pg_plan_advice 与 pg_stash_advice 两个 contrib 模块,帮助开发者在查询计划变更后快速恢复旧计划。
- pg_plan_advice:可将查询计划导出为文本字符串,并在后续执行时强制使用该计划。
- pg_stash_advice:按查询 ID 存储这些字符串,并在查询执行时自动应用,支持跨会话持久化。
使用方式简洁:
1. 在postgresql.conf中分别加入
```conf
session_preload_libraries = 'pg_plan_advice'
shared_preload_libraries = 'pg_stash_advice'
```
2. 对需要固定的查询执行
```sql
EXPLAIN (COSTS OFF, PLAN_ADVICE) SELECT …;
```
结果会在Generated Plan Advice块中给出四行建议,描述 join 顺序、join 方法、扫描方式和并行性。
3. 若想自动化恢复旧计划,只需CREATE EXTENSION pg_stash_advice;,插件会根据查询 ID 自动匹配并强制使用保存的计划。
此功能适用于任何需要在统计变化或版本升级后保持查询性能的场景,尤其在 PostgreSQL 16 与 19 之间进行升级前的计划对比时极为有用。
GitHub: GitHub
GitHub: GitHub
🔗 原文:postgr.es/p/9uC