首批通过分布式安全可靠测评,为关键业务系统打造
计划缓存概述
更新时间:2026-04-10 11:58:35
OceanBase 数据库中存在大量的改写规则和复杂的计划生成算法,这些都为 OceanBase 数据库带来了强大的优化能力。然而任何事情都具有两面性,更多改写的尝试、更复杂的计划生成算法必然会使得计划的生成时间变得更久。在极端的 TP 场景下,一个主键单点查询的 SQL 可能生成计划花了 1ms,但是计划的执行只需要 0.5ms。在这种场景下,如果每条 SQL 执行时都要重新生成计划,那么 SQL 的主要耗时就会花在生成计划上了。因此 OceanBase 数据库引入了计划缓存(Plan Cache)机制供相同的SQL共享执行计划。
计划缓存
当 OceanBase 数据库收到一条 SQL 请求后,首先会通过 fast parser 模块对 SQL 文本做一次快速参数化。快速参数化的作用是把 SQL 文本中的常量参数替换成通配符 ?,例如 SELECT * FROM t1 WHERE c1 = 1 会被替换为 SELECT * FROM t1 WHERE c1 = ?。接着数据库会从计划缓存中查看有没有已经生成好的计划给这条参数化后的 SQL 使用。如果找到了可用的计划,数据库就会直接执行这个计划。如果没有找到可用的计划,数据库会重新为这条 SQL 生成执行计划,并把生成好的计划保存到计划缓存中以备后续的 SQL 使用。通常情况下从计划缓存中直接获取执行计划相比于重新生成执行计划,耗时通常会低至少一个数量级,因此使用计划缓存可以大大降低获取执行计划的时间,从而减少 SQL 的响应时间。
