ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 共享游标(cursor shared)_02

共享游标(cursor shared)_02

原创 Linux操作系统 作者:Solomon-Yin 时间:2010-11-27 17:37:51 0 删除 编辑
继续之前关于共享游标的实验
接下来要说明的一个问题是关于子游标的共享,在sql的文本完全相同的情况下,产生的父游标可能被共享,而这时cursor能否被共享就取决于子游标能否共享了,与子游标相关的关键因素是执行环境.,而非sql_text,即sql文本

实验步骤如下
SQL> show parameter optimizer_mode;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_mode                       string      FIRST_ROWS_10
SQL> select count(*) from t1;

  COUNT(*)
----------
      1001

SQL> alter system set optimizer_mode = all_rows;

System altered.

SQL> select count(*) from t1;

  COUNT(*)
----------
      1001

SQL> col sql_text format a25;
SQL> select sql_id, sql_text, child_number, optimizer_mode, plan_hash_value from v$sql where sql_id = (select prev_sql_id from v$session where sid = sys_context('userenv', 'sid'));

SQL_ID        SQL_TEXT                  CHILD_NUMBER OPTIMIZER_ PLAN_HASH_VALUE
------------- ------------------------- ------------ ---------- ---------------
5bc0v4my7dvr5 select count(*) from t1              0 FIRST_ROWS      3724264953
5bc0v4my7dvr5 select count(*) from t1              1 ALL_ROWS        3724264953

SQL> select sql_id, optimizer_mode_mismatch from v$sql_shared_cursor where sql_id = '5bc0v4my7dvr5'
  2  ;

SQL_ID        O
------------- -
5bc0v4my7dvr5 N
5bc0v4my7dvr5 Y

由此得出了结论,在父游标共享的情况下(v$sql中的sql_id一致), 子游标由于出现了optimizer_mode的mismatch导致了不能共享。
而关于mismatch,在上一篇里面有了简单介绍,可以通过查看v$sql_shared_cursor来进行判断。

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

下一篇: RMAN块级别备份_01
请登录后发表评论 登录
全部评论

注册时间:2010-03-15

  • 博文量
    11
  • 访问量
    17217