[20241123]PLSQL语句代码执行几次会缓存.txt --//测试看看PLSQL语句代码执行几次会缓存。 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 2.建立测试环境: create table job_times (sid number, time_ela number,method varchar2(20)); drop table t purge ; create table t as select rownum id ,'test' pad from dual connect by level<=5e5; create unique index pk_t on t(id); exec dbms_stats.gather_table_stats(user, 't', method_opt=>'for all columns size 1'); $ cat ma.sql DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..&1 LOOP EXECUTE IMMEDIATE 'Select /*+ &2 */ count(*) from t where id = :j ' INTO l_count USING i; END LOOP; END; / 3.测试: --//session 1: SCOTT@book> @ spid ============================== SID : 198 SERIAL# : 15 PROCESS : 4149 SERVER : DEDICATED SPID : 4150 PID : 23 P_SERIAL# : 8 KILL_COMMAND : alter system kill session '198,15' immediate; PL/SQL procedure successfully completed. SCOTT@book> @ ma.sql 1 aaa PL/SQL procedure successfully completed. --//session 2: SYS@book> select sql_id ,sql_text from v$sql where sql_text like '%aaa%'; SQL_ID SQL_TEXT ------------- ------------------------------------------------------------ guks3pkwd919m select sql_id ,sql_text from v$sql where sql_text like '%aaa %' 7qw22mv75gdk3 DECLARE l_count PLS_INTEGER; BEGIN FOR i IN 1..1 LOOP EXECUTE IMMEDIATE 'Select /*+ aaa */ count(*) fr om t where id = :j ' INTO l_count USING i; END LOOP; END ; a69n5u4fp3dsm Select /*+ aaa */ count(*) from t where id = :j SYS@book> select * from v$open_cursor where sql_id='a69n5u4fp3dsm' 2 @pr ============================== SADDR : 000000008F06AFE0 SID : 198 USER_NAME : SCOTT ADDRESS : 0000000088940A68 HASH_VALUE : 491894547 SQL_ID : a69n5u4fp3dsm SQL_TEXT : Select /*+ aaa */ count(*) from t where id = :j LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : PL/SQL CURSOR CACHED PL/SQL procedure successfully completed. --//session 1: SCOTT@book> @ ma.sql 1 aaa PL/SQL procedure successfully completed. --//session 2: SYS@book> @pr ============================== SADDR : 000000008F06AFE0 SID : 198 USER_NAME : SCOTT ADDRESS : 0000000088940A68 HASH_VALUE : 491894547 SQL_ID : a69n5u4fp3dsm SQL_TEXT : Select /*+ aaa */ count(*) from t where id = :j LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : PL/SQL CURSOR CACHED PL/SQL procedure successfully completed. SYS@book> select sql_id,sql_text,executions from v$sql where sql_id='a69n5u4fp3dsm'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- a69n5u4fp3dsm Select /*+ aaa */ count(*) from t where id = :j 2 --//可以发现plsql代码执行1次就缓存了。 --//而普通执行的sql语句: $ cat mb.txt select * from dept where deptno=31; @ hash --//注意:后面执行@hash,不然查看v$open_cursor光标处于打开状态。 --//session 1: SCOTT@book> @ spid ============================== SID : 19 SERIAL# : 81 PROCESS : 7552 SERVER : DEDICATED SPID : 7553 PID : 24 P_SERIAL# : 50 KILL_COMMAND : alter system kill session '19,81' immediate; PL/SQL procedure successfully completed. --//第1次执行: SCOTT@book> @ mb.txt no rows selected HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 1289778109 363ktkj6f0wxx 0 29629 2852011669 4ce073bd 2024-11-23 12:06:57 16777216 --//session 2: --//第1次执行后查询: SYS@book> select sql_id,sql_text,executions from v$sql where sql_id='363ktkj6f0wxx'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 363ktkj6f0wxx select * from dept where deptno=31 1 SYS@book> select * from v$open_cursor where sql_id='363ktkj6f0wxx' 2 @pr PL/SQL procedure successfully completed. --//第2次执行后查询: SYS@book> select sql_id,sql_text,executions from v$sql where sql_id='363ktkj6f0wxx'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 363ktkj6f0wxx select * from dept where deptno=31 2 SYS@book> select * from v$open_cursor where sql_id='363ktkj6f0wxx' 2 @pr PL/SQL procedure successfully completed. --//第3次执行后查询: SYS@book> select sql_id,sql_text,executions from v$sql where sql_id='363ktkj6f0wxx'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 363ktkj6f0wxx select * from dept where deptno=31 3 SYS@book> select * from v$open_cursor where sql_id='363ktkj6f0wxx' 2 @pr ============================== SADDR : 000000008F5E7120 SID : 19 USER_NAME : SCOTT ADDRESS : 000000008F84DF70 HASH_VALUE : 1289778109 SQL_ID : 363ktkj6f0wxx SQL_TEXT : select * from dept where deptno=31 LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : DICTIONARY LOOKUP CURSOR CACHED PL/SQL procedure successfully completed. --//第4次执行后查询: SYS@book> select sql_id,sql_text,executions from v$sql where sql_id='363ktkj6f0wxx'; SQL_ID SQL_TEXT EXECUTIONS ------------- ------------------------------------------------------------ ---------- 363ktkj6f0wxx select * from dept where deptno=31 4 SYS@book> select * from v$open_cursor where sql_id='363ktkj6f0wxx' 2 @pr ============================== SADDR : 000000008F5E7120 SID : 19 USER_NAME : SCOTT ADDRESS : 000000008F84DF70 HASH_VALUE : 1289778109 SQL_ID : 363ktkj6f0wxx SQL_TEXT : select * from dept where deptno=31 LAST_SQL_ACTIVE_TIME : SQL_EXEC_ID : CURSOR_TYPE : SESSION CURSOR CACHED PL/SQL procedure successfully completed. --//第4次执行光标缓存。
[20241123]PLSQL语句代码执行几次会缓存.txt
来源:这里教程网
时间:2026-03-03 20:56:44
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 全 网 第 一 份JSON二元性“写操作”的实践
全 网 第 一 份JSON二元性“写操作”的实践
26-03-03 - 第15期Oracle调用DBMS_JOB.SUBMIT报错:ORA-27486:权限不足
- Oracle数据库 Truncate慢分析
Oracle数据库 Truncate慢分析
26-03-03 - 长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
长沙家具宝藏店法拉利沙发,奢华优雅的家居典范
26-03-03 - oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
oracle数据恢复—Oracle数据库文件大小变为0kb怎么恢复数据?
26-03-03 - 一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
一万字,浅谈Oracle数据库truncate原理,无备份,如何恢复!
26-03-03 - 湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
湖南家具铂金钻奢石餐桌,简约与优雅的完美融合
26-03-03 - 07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线
- 湖南家具大黑牛沙发,舒适与品质的完美邂逅
湖南家具大黑牛沙发,舒适与品质的完美邂逅
26-03-03 - 实战分享:如何在HP-UX上高效扩容Oracle 12c RAC ASM磁盘
