Oracle中SQL语句解析的步骤
作者:网络转载 发布时间:[ 2014/7/14 10:29:08 ] 推荐标签:Oracle SQL语句 数据库
|
SQL> connect a/a
Connected.
SQL> create table emp ( x int );
Table created.
SQL> select * from emp;
no rows selected
SQL> connect b/b
Connected.
SQL> create table emp ( x int );
Table created.
SQL> select * from emp;
no rows selected
SQL> conn scott/tiger
Connected.
SQL> select * from emp;
SQL> conn c/c
Connected.
SQL> select * from emp;
SQL> conn/as sysdba
Connected.
SQL> select address,hash_value, executions, sql_text
from v$sql
where upper(sql_text) like 'SELECT * FROM EMP%'
/
ADDRESS HASH_VALUE EXECUTIONS SQL_TEXT
-------- ---------- ---------- ------------------------
78B89E9C 3011704998 1 select * from emp
78B89E9C 3011704998 1 select * from emp
78B89E9C 3011704998 2 select * from emp
...
|
我们可以看到这四个查询的语句文本和HASH值都是一样的,但是由于查询的对象不同,只有后面两个语句是可以共享的,不同情况的语句还是需要硬解析的。因此在检查共享池共同SQL语句的时候,是需要根据具体情况而定的。
我们可以进一步查询v$sql_shared_cursor以得知SQL为何不能共享的原因:
|
SQL> select kglhdpar, address,
auth_check_mismatch, translation_mismatch
from v$sql_shared_cursor
where kglhdpar in
( select address
from v$sql
where upper(sql_text) like 'SELECT * FROM EMP%' )
/
KGLHDPAR ADDRESS A T
-------- -------- - -
78B89E9C 786C9D78 N N
78B89E9C 786AC810 Y Y
78B89E9C 786A11A4 Y Y
...
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com