PostgreSQL 的 plan_cache_mode=auto 会先执行五次自定义计划,第六次若通用计划估算成本更低则切换。对拥有 80 万订单的大租户,通用计划误估为 216 行,改用嵌套循环并触发 320 万次缓冲命中,查询从 274 毫秒骤增至 2319 毫秒。单次 EXPLAIN 无法发现,需在同一连接重复运行并保留每次计划。修复方法是设置 plan_cache_mode=force_custom_plan。
在#PostgresMarathon 2-008中,预处理语句显著减少了LWLock:LockManager的争用。通过从规划器锁切换到执行器锁,锁的数量从6降至1。测试分区表时,执行6时锁数量从8增至52,但执行7后,使用缓存的通用计划,锁数量显著减少。
完成下面两步后,将自动完成登录并继续当前操作。