启用预处理重用(prepare_reuse)
📄字数 703
👁️阅读量 加载中...
引入版本
v11.0.0
功能描述
是否开启 prepare 重用。
参数属性
| 属性 | 属性值 |
|---|---|
| 参数类型 | BOOLEAN |
| 默认值 | TRUE |
| 取值范围 | TRUE,FALSE |
| 影响范围 | 系统级 |
| 修改方式 | 在线修改,立即生效 |
使用场景说明
- 该参数控制系统执行 DML 预处理语句的行为。
| prepare_reuse | 作用描述 |
|---|---|
| TRUE | 执行 prepare 预处理语句时,系统尽量重用旧的执行计划,除非相关表结构发生变化。 |
| FALSE | 执行 prepare 预处理语句时,重新进行路径规划。 |
注意
- 使用 prepare 定义预处理语句时,连接会话上会持有事务级对象锁(IX锁),事务提交后才可对相关对象进行 DDL 操作。
- prepare_reuse = true 时,若在定义 DML 预处理语句之后对相关表对象进行过修改,则用户在下次执行该预处理语句时仍然会重新规划执行计划。
示例
sql
-- 在线修改 prepare_reuse
SQL> SET prepare_reuse TO true;
-- 在线查看 prepare_reuse
SQL> SHOW prepare_reuse;
/*
* 场景一:
* 1. prepare_reuse = true;
* 2. auto_commit = true;
*/
SQL> PREPARE st0 as SELECT * FROM t1 WHERE c1=1;
SQL> ?st0; -- 使用旧的执行计划;
SQL> ALTER TABLE t1 MODIFY COLUMN c1 BIGINT; -- 修改表结构
SQL> ?st0; -- 重新规划执行计划;
/*
* 场景二:
* 1. prepare_reuse = false;
* 2. auto_commit = true;
*/
SQL> PREPARE st0 as SELECT * FROM t1 WHERE c1=1;
SQL> ?st0; -- 重新规划执行计划;