(12)共享SQL减少硬解析
视频链接:
https://www.bilibili.com/video/BV1Zt411w7eQ?p=14&spm_id_from=pageDriver
1、SQL共享,绑定变量
例如下3条sql语句:
select /*hello*/ count(*) from t1 where OBJECT_ID=1;
select /*hello*/ count(*) from t1 where OBJECT_ID=2;
select /*hello*/ count(*) from t1 where OBJECT_ID=1;
不能共享,必须一模一样才可以共享(空格、数值不一样、空格、回车等等)。
select sql_id,sql_text,executions from v$ sql where sql_text like '%hello%';
对sql语句解析时,首先分配一个sql_id
加强共享:
- 统一书写风格
- 使用绑定变量
declare v_sql varchar2(50);
begin for i in 1..10000 loop
v_sql :='insert /*he1lo*/ into test values (:1)’;
execute immediate v_sql using i ;
end loop;
commit;
end;
:1 占位符,相当于绑定变量
SQL语句组成,动态部分、静态部分
cursor_sharing参数
SQL>show parameter cursor
SQL> alter system set session_cached_cursors=150 scope=spfile;
System altered.
2、找出没有共享的SQL语句
如何找出不能共享cursor的sql
在v$sqi查找执行次数较小的sql语句,观察这些sql语句是否是经常执行的。
select SQL_FULLTEXT from v$sql where EXECUTTONS=1 and sql_text like '%from t% ;
select SQL_FULLTEXT from v$sql where EXECUTIONS=1 order by sql_text;
--生成文件
SQL>spool 1.lst
SQL>select SQL_FULLTEXT from v$sql where EXECUTIONS=1 order by sql_text;
SQL>spool off
上一篇:Oracle学习笔记–系列一(11)
下一篇:Oracle学习笔记–系列一(13)