学习视图 v$sql_shared_cursor

V$SQL_SHARED_CURSOR explains why a particular child cursor is not shared with existing child cursors. Each column identifies a specific reason why the cursor cannot be shared.

这个视图是用来查看sql没有被共享的原因,分以下两种情况进行测试:

1. 优化器模式不同时

以scott用户登录数据库,执行:


SQL> select count(*) from emp where empno=9000;
 
  COUNT(*)
----------
         0

SQL> alter session set optimizer_mode=first_rows_1
 
Session altered.
 
SQL> select count(*) from emp where empno=9000;
 
  COUNT(*)
----------
         0

以sys用户登录数据库,查看该视图:

SQL> select sql_id,address,sql_text,address, child_address, optimizer_mode from v$sql
  2  where sql_text like 'select count(*) from emp%';
 
SQL_ID        ADDRESS  SQL_TEXT                       ADDRESS  CHILD_AD OPTIMIZER_
------------- -------- ------------------------------ -------- -------- ----------
fph4602hqpfaz 299D1180 select count(*) from emp where 299D1180 299D07DC ALL_ROWS
                        empno=9000
 
fph4602hqpfaz 299D1180 select count(*) from emp where 299D1180 29900CB0 FIRST_ROWS
                        empno=9000
                       
SQL> select sql_id,address,child_address,child_number,OPTIMIZER_MODE_MISMATCH from v$sql_shared_cursor where OPTIMIZER_MODE_MISMATCH='Y';

SQL_ID        ADDRESS  CHILD_AD CHILD_NUMBER O
------------- -------- -------- ------------ -
fph4602hqpfaz 299D1180 29900CB0            1 Y
fph4602hqpfaz 299D1180 296E7CA0            2 Y

2.schema 不同时。

首先以scott用户登录数据库:

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Dec 26 15:01:36 2008
 
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
 
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Data Mining and Real Application Testing options
 
SQL> show user
USER is "SCOTT"
SQL> select count(*) from emp;
 
  COUNT(*)
----------
        15

 

再以sys用户登录数据库:

-bash-3.00$ sqlplus '/as sysdba'
 
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Dec 26 15:02:26 2008
 
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
 
 
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, Data Mining and Real Application Testing options
 
SQL> show user
USER is "SYS"
SQL> select count(*) from emp;
 
  COUNT(*)
----------
        14

此时,再查看:

SQL> select sql_id,address,sql_text,address, child_address, optimizer_mode from v$sql
  2  where sql_text like 'select count(*) from emp%';
 
SQL_ID        ADDRESS  SQL_TEXT                                                     ADDRESS  CHILD_AD OPTIMIZER_
------------- -------- ------------------------------------------------------------ -------- -------- ----------
g59vz2u4cu404 2A378C10 select count(*) from emp                                     2A378C10 2A37826C ALL_ROWS
g59vz2u4cu404 2A378C10 select count(*) from emp                                     2A378C10 2A36A20C ALL_ROWS

 SQL> select sql_id,address,child_address,child_number,OPTIMIZER_MODE_MISMATCH, AUTH_CHECK_MISMATCH from v$sql_shared_cursor where AUTH_CHECK_MISMATCH='Y';
 
SQL_ID        ADDRESS  CHILD_AD CHILD_NUMBER O A
------------- -------- -------- ------------ - -
5wpg5u2rw4xk5 2A2756DC 2AF82BD8            1 N Y
g59vz2u4cu404 2A378C10 2A36A20C            1 N Y

总结:通过以上两个小测试,可以发现,sql能否被共享,取决于很多因素,上述试验就验证了当优化器模式和用户模式不同时,sql不能被共享的情况。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10972173/viewspace-521333/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10972173/viewspace-521333/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值