Skip to content

Commit

Permalink
planner: prepared plan cache support limit (#12686)
Browse files Browse the repository at this point in the history
  • Loading branch information
fzzf678 authored Feb 16, 2023
1 parent e2df890 commit 8873d10
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
2 changes: 1 addition & 1 deletion sql-prepared-plan-cache.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ TiDB 优化器对这两类查询的处理是一样的:`Prepare` 时将参数
- 包含 `ignore_plan_cache` 这一 Hint 的查询,例如 `select /*+ ignore_plan_cache() */ * from t`
- 包含除 `?` 外其他变量(即系统变量或用户自定义变量)的查询,例如 `select * from t where a>? and b>@x`
- 查询包含无法被缓存函数。目前不能被缓存的函数有:`database()``current_user``current_role``user``connection_id``last_insert_id``row_count``version``like`
- `?``Limit` 后的查询,如 `Limit ?` 或者 `Limit 10, ?`,此时 `?` 的具体值对查询性能影响较大,故不缓存
- `LIMIT` 后面带一个变量 (`LIMIT ?`) 且变量值大于 10000 的执行计划不缓存
- `?` 直接在 `Order By` 后的查询,如 `Order By ?`,此时 `?` 表示根据 `Order By` 后第几列排序,排序列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Order By a+?` 则会缓存;
- `?` 紧跟在 `Group by` 后的查询,如 `Group By ?`,此时 `?` 表示根据 `Group By` 后第几列聚合,聚合列不同的查询使用同一个计划可能导致错误结果,故不缓存;如果是普通表达式,如 `Group By a+?` 则会缓存;
- `?` 出现在窗口函数 `Window Frame` 定义中的查询,如 `(partition by year order by sale rows ? preceding)`;如果 `?` 出现在窗口函数的其他位置,则会缓存;
Expand Down
8 changes: 8 additions & 0 deletions system-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -1513,6 +1513,14 @@ MPP 是 TiFlash 引擎提供的分布式计算框架,允许节点之间的数
- 默认值:`ON`
- 该变量指定是否对窗口函数采用流水线的执行算法。
### `tidb_enable_plan_cache_for_param_limit` <span class="version-mark">从 v6.6.0 版本开始引入</span>
- 作用域:SESSION | GLOBAL
- 是否持久化到集群:是
- 类型:布尔型
- 默认值:`ON`
- 这个变量用来控制 Prepared Plan Cache 是否缓存 `LIMIT` 后面带变量 (`LIMIT ?`) 的执行计划。目前不支持缓存 `LIMIT` 后面带变量且变量值大于 10000 的执行计划。
### `tidb_enable_plan_replayer_capture`
- 作用域:SESSION | GLOBAL
Expand Down

0 comments on commit 8873d10

Please sign in to comment.