/************************************ 首先创建表 t **************************************/
SQL> create table t as select empno,ename,sal from emp where deptno=10;
Table created.
*********************************** 对表进行查询 *****************************************/
SQL> select * from t where empno=7782;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
SQL> SELECT * from t where empno=7782;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
SQL> SELECT * FROM t WHERE empno=7782;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
SQL> select * from t where empno=7782;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
SQL> col sql_text format a40
SQL> select sql_id,sql_text,executions from v$sqlarea
2 where sql_text like '%empno=7782%' and sql_text not like '%from v$sqlarea%';
SQL_ID SQL_TEXT EXECUTIONS
------------- ---------------------------------------- ----------
4rs2136z084y1 SELECT * from t where empno=7782 1
84w067b4n91h5 SELECT * FROM t WHERE empno=7782 1
2r6rbdp92kyh9 select * from t where empno=7782 2
/************上面3个父游标对应的子游标可以在v$sql中获得 *******************/
SQL> select sql_id,hash_value,child_number,plan_hash_value,sql_text,executions from v$sql
2 where sql_text like '%empno=7782%' and sql_text not like '%from v$sql%';
SQL_ID HASH_VALUE CHILD_NUMBER PLAN_HASH_VALUE SQL_TEXT EXECUTIONS
------------- ---------- ------------ --------------- ---------------------------------------- ----------
4rs2136z084y1 3187938241 0 1601196873 SELECT * from t where empno=7782 1
84w067b4n91h5 3376711173 0 1601196873 SELECT * FROM t WHERE empno=7782 1
2r6rbdp92kyh9 1378449929 0 1601196873 select * from t where empno=7782 2
/******************调整optimizer_index_caching 参数并执行聚合查询 ************************/
SQL> alter session set optimizer_index_caching=40;
Session altered.
SQL> select sum(sal) from t;
SUM(SAL)
----------
8750
SQL> alter session set optimizer_index_caching=100;
Session altered.
SQL> select sum(sal) from t;
SUM(SAL)
----------
8750
/***************相同的查询由于不同的运行环境导致产生了不同的子游标,optimizer_env_hash_value值不同 **************/
/***************不同的子游标有不同的child_address 值 ****************************/
SQL> select sql_id, child_number, sql_text,optimizer_env_hash_value oehv,child_address
2 from v$sql where sql_text like '%sum(sal)%' and sql_text not like '%from v$sql%';
SQL_ID CHILD_NUMBER SQL_TEXT OEHV CHILD_ADDRESS
------------- ------------ ---------------------------------------- ---------- ----------------
gu68ka2qzx3hh 0 select sum(sal) from t 3620536549 0000000093696D00
gu68ka2qzx3hh 1 select sum(sal) from t 2687219005 0000000093767F58
/********** 查询v$sql_shared_cursor可以跟踪是那些变化导致了子游标不能共享,此例为optimizer_mismatch *****************/
SQL> SELECT child_number, optimizer_mismatch
2 FROM v$sql_shared_cursor
3 WHERE sql_id = '&sql_id';
Enter value for sql_id: gu68ka2qzx3hh
old 3: WHERE sql_id = '&sql_id'
new 3: WHERE sql_id = 'gu68ka2qzx3hh'
CHILD_NUMBER O
------------ -
0 N
1 Y
/***********************观察父游标address,hash_value,sql_id ******************/
/***********************观察子游标address,hash_value,child_number,sql_id,child_address ******************/
/************************从Oracle 10g 之后,sql_id既可以唯一确定一个父游标,sql_id,child_number唯一确定一个子游标*****/
SQL> SELECT address,hash_value,sql_id FROM v$sqlarea WHERE sql_id='gu68ka2qzx3hh';