
# 技术原理
#### 核心机制
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620720475.png "点击放大")
SQL执行流程中，预编译计划缓存可复用从词法、语法分析到计划生成的完整流程，其中计划缓存复用效果受计划类型影响，复用成功后，每次执行仅需处理计划执行模块。
预编译阶段，将对词法语法解析、语义分析及查询重写结果进行缓存，并启动查询优化与计划生成操作，生成计划时选择Generic Plan或Custom Plan。两种计划类型具有不同特性：
- Generic Plan：允许不同参数值使用同一执行计划。
- Custom Plan：固化参数值至计划中，需为每个参数组合重建计划。
对于不存在绑定参数场景下，Generic Plan与Custom Plan执行计划相同，默认选择Generic Plan。
两种计划各有优势：Generic Plan可降低优化器计算开销；Custom Plan基于具体参数值进行代价估算，确保执行计划最优性。具体选择机制请参见《SQL调优指南》中"使用Plan Hint进行调优 \> Custom Plan和Generic Plan选择的Hint"章节与《参考》中"数据库运行参数说明 \> GUC参数说明 \> 查询规划 \> 其他优化器选项"章节中的"plan_cache_mode"。
计划缓存复用范围取决于计划类型：
- Generic Plan：完整复用词法语法分析至计划生成的中间结果。
- Custom Plan：仅复用语义解析层（词法语法分析、语义分析、查询重写）。
当计划缓存依赖的数据库对象发生变更时（如DDL修改系统表元数据），缓存计划将与新元信息不匹配导致失效。此时系统通过元数据变更事件自动触发缓存失效机制，强制在下次执行时重建计划。
#### 接口介绍
表1预编译计划缓存涉及的视图说明 
| 视图                         | 说明                                                                                           |
|:---|:---|
| PG_PREPARED_STATEMENTS     | 该视图显示当前会话所有可用的预备语句的信息。具体请参见《参考》中"系统表和系统视图 \> 系统视图 \> 其他系统视图 \> PG_PREPARED_STATEMENTS"章节。    |
| GS_ALL_PREPARED_STATEMENTS | 该视图显示所有会话中可用的预备语句的信息。具体请参见《参考》中"系统表和系统视图 \> 系统视图 \> 其他系统视图 \> GS_ALL_PREPARED_STATEMENTS"章节。 |
   
