更新时间:2026-07-28 GMT+08:00
特性概述
功能定义
- 相同语句计划复用:是一项通过缓存执行计划优化查询性能的技术。其核心原理是缓存SQL语句及已生成的执行计划,当后续遇到相同SQL文本的SQL语句(包括所有字面值、大小写、空格等都需相同)时,直接复用缓存计划,从而跳过重复的解析、优化等耗时阶段。该功能支持GSQL发送的简单查询和PBE(包含batch)场景,SQL文本中可以包含用户指定的绑参。
- 自动参数化:参数化过程会将SQL语句中的字面量替换为绑定参数变量。当参数化后的SQL语句相同,可复用同一个计划模板。支持简单查询和PBE(包含batch)中无绑定参数的场景。原始SQL语句不能存在用户指定绑定参数,如果已包含用户指定绑参,仅能支持相同语句计划复用。
相同语句计划复用技术和自动化参数技术可通过GUC参数cursor_sharing控制,GUC参数cursor_sharing的行为介绍,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 查询规划 > 其他优化器选项”章节。
- 当GUC参数cursor_sharing设置为force时,同时启用自动参数化以及相同语句计划复用功能。对于满足自动参数化条件的语句,则优先通过自动参数化缓存;满足不了则通过相同语句计划复用缓存。例如在MYSQL或M兼容模式下,不支持参数化,会自动按照cursor_sharing = exact的行为实现。
- 当GUC参数cursor_sharing设置为exact时,仅启用相同语句计划复用功能。
- 当GUC参数cursor_sharing设置为off时,关闭自动参数化以及相同语句计划复用功能。
在计划模板无法复用的情况下,无法通过计划复用带来性能提升。且如果存入大量不同的SQL模板,会引起计划缓存内存占用过多,触发计划内存上限淘汰,导致性能下降,极端场景下可能会引起掉零。
规格约束
- 相同语句计划复用:
- 仅支持简单查询语句以及PBE语句。
- 仅支持DML语句。
- 不支持存储过程内语句。
- M-Compatibility兼容模式下,不支持SHOW INDEX语句以及不支持SELECT INTO outfile语句。
- 自动参数化:
- 仅支持简单查询语句以及无绑定参数的PBE(包含batch场景)语句。
- 仅支持DML语句。
- 不支持存储过程内语句。
- 不支持语句本身含有绑定参数的语句。
- 不支持lightproxy场景下含GSI表的语句。
- 不支持含有DBLINK表的语句。
- 不支持MYSQL兼容模式数据库。
- M-Compatibility兼容模式下,设置GUC参数m_format_behavior_compat_options包含select_column_name选项后,不支持自动参数化。
- M-Compatibility兼容模式下,存在用户变量的语句不支持自动参数化。
- M-Compatibility兼容模式下,不支持SHOW INDEX语句自动参数化,不支持SELECT INTO outfile语句自动参数化。
- 部分常量不支持参数化,包含类型后面的精度常量,如:int(n)、ORDER BY/GROUP BY后的列常量、Hint内常量、_charset后的常量以及分区表分区中的常量等。
父主题: 自动参数化和相同语句计划复用