DBMS_SPM 包,例如LOAD_PLANS_FROM_CURSOR_CACHE,官网中介绍了语法及示例,不知道这个示例是啥意思?如下网页,搜索示例。
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003273184
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003981240
调用,应该执行call dbms_spm.load_plans_from_cursor_cache(‘testdb1’,‘1B92WERT2E7D7A402FA5AEC813DHTED4’,11109565326002978765);就可以了吧?
那给的如下示例是啥意思呢?是什么作用呢?
DECLARE
v_load_plans number;
BEGIN
v_load_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => ‘529F6E6454EF579C7CC265D1F6131D70’,
plan_hash_value => 13388268709115914355);
END;
/
1 个赞
SPM分为函数和存过,存过用call,函数不能用call
函数用select啊,就是不明白文档中的示例是啥意思用。
论坛小助手
#9
该示例展示了如何使用 PL/SQL 调用 DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE 函数,将指定 SQL 的执行计划从 Plan Cache 加载到 SQL Plan Management (SPM) 基线中。具体步骤如下:
-
声明变量:声明一个变量
v_load_plans 来存储函数的返回值。
-
调用函数:调用
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE 函数,传入 sql_id 和 plan_hash_value 参数。
-
赋值:将函数的返回值赋给
v_load_plans 变量。
-
结束:使用
END; 结束 PL/SQL 块。
具体示例如下:
DECLARE
v_load_plans number;
BEGIN
v_load_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '529F6E6454EF579C7CC265D1F6131D70',
plan_hash_value => 13388268709115914355);
END;
/
在这个示例中,sql_id 是要加载的 SQL 的唯一标识符,plan_hash_value 是要加载的执行计划的哈希值。函数的返回值 v_load_plans 表示加载成功的计划数量。
如果你需要调用这个函数,可以参考以下步骤:
-
确定
sql_id 和 plan_hash_value:你需要知道要加载的 SQL 的 sql_id 和 plan_hash_value。这些信息可以通过查询 GV$SQL 视图或其他相关视图获得。
-
编写 PL/SQL 块:编写一个 PL/SQL 块来调用
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE 函数。
-
执行 PL/SQL 块:在数据库中执行这个 PL/SQL 块。
例如,如果你有一个 sql_id 为 ‘1B92WERT2E7D7A402FA5AEC813DHTED4’ 和 plan_hash_value 为 11109565326002978765 的 SQL,可以这样调用:
DECLARE
v_load_plans number;
BEGIN
v_load_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '1B92WERT2E7D7A402FA5AEC813DHTED4',
plan_hash_value => 11109565326002978765);
END;
/
这个调用将会把指定的执行计划加载到 SPM 基线中。
检索到的文档如下:
- oceanbase.DBA_OB_IMPORT_TABLE_JOBS
- GV$OB_PL_CACHE_OBJECT
文档中的示例是oracle租户兼容模式的执行方式,也可以使用select。mysql模式是select。
所以以下两种方式是等效的
第一种:
DECLARE
v_load_plans number;
BEGIN
v_load_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => ‘529F6E6454EF579C7CC265D1F6131D70’,
plan_hash_value => 13388268709115914355);
END;
/
第二种
select DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(‘529F6E6454EF579C7CC265D1F6131D70’,13388268709115914355) from dual;
您看我的理解是不是对的?