[20170621]Session Cursor Caching 4.txt

[20170621]Session Cursor Caching 4.txt

--//前面的测试由于匿名块的sql语句使用execute immediate 调用,这样导致
--//在sqlplus下执行相同的sql语句无法共享,产生了子光标.影响的测试.链接:http://blog.itpub.net/267265/viewspace-2141045/

--//这次修改一些直接执行看看.

1.环境:
SCOTT@book> @ &r/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

$ cat a3.txt
declare
    a number  := 0;
begin
select /*+ find_me */ count(*) into a from emp;
end ;
/

--//通过扫描共享池可以确定sql_id是('3msqvmftys0rz','6d4p4q16sp5gy');

2.测试1:

SCOTT@book> @ a3.txt
PL/SQL procedure successfully completed.

SCOTT@book> select sql_id,PARSE_CALLS,executions from v$sql where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SQL_ID        PARSE_CALLS EXECUTIONS
------------- ----------- ----------
3msqvmftys0rz           1          1
6d4p4q16sp5gy           1          1

SCOTT@book> select * from V$OPEN_CURSOR where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SADDR            SID USER_NAME ADDRESS          HASH_VALUE SQL_ID        SQL_TEXT                                                     LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE
---------------- --- --------- ---------------- ---------- ------------- ------------------------------------------------------------ ------------------- ----------- --------------------
00000000854DC040 232 SCOTT     000000007D772D10 3018588927 3msqvmftys0rz SELECT /*+ find_me */ COUNT(*) FROM EMP                                                      PL/SQL CURSOR CACHED
00000000854DC040 232 SCOTT     000000007BE3F8A8 1300927998 6d4p4q16sp5gy declare     a number  := 0; begin select /*+ find_me */ coun                                 OPEN

--//注意看一个小细节.sql_id='3msqvmftys0rz'对应的sql_text变成了大写(当然我注解就是小写),换一句讲在执行前,oracle做了格式化处理.
--//sql_id='3msqvmftys0rz',PARSE_CALLS=1,并且CURSOR_TYPE='PL/SQL CURSOR CACHED'.
`
3.测试2:
--//单独执行sql语句看看.
SCOTT@book> SELECT /*+ find_me */ COUNT(*) FROM EMP;
  COUNT(*)
----------
        14

SCOTT@book> select sql_id,PARSE_CALLS,executions,child_number from v$sql where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SQL_ID        PARSE_CALLS EXECUTIONS CHILD_NUMBER
------------- ----------- ---------- ------------
3msqvmftys0rz           1          1            0
3msqvmftys0rz           1          1            1
6d4p4q16sp5gy           1          1            0

SCOTT@book> select * from V$OPEN_CURSOR where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SADDR            SID USER_NAME ADDRESS          HASH_VALUE SQL_ID        SQL_TEXT                                LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE
---------------- --- --------- ---------------- ---------- ------------- --------------------------------------- ------------------- ----------- -------------------
00000000854DC040 232 SCOTT     000000007D772D10 3018588927 3msqvmftys0rz SELECT /*+ find_me */ COUNT(*) FROM EMP                                 PL/SQL CURSOR CACHED
00000000854DC040 232 SCOTT     000000007D772D10 3018588927 3msqvmftys0rz SELECT /*+ find_me */ COUNT(*) FROM EMP                                 OPEN

--//可以发现光标依旧无法共享.

SCOTT@book> @ &r/share 3msqvmftys0rz
old  15:           and q.sql_id like ''&1''',
new  15:           and q.sql_id like ''3msqvmftys0rz''',
SQL_TEXT                       = SELECT /*+ find_me */ COUNT(*) FROM EMP
SQL_ID                         = 3msqvmftys0rz
ADDRESS                        = 000000007D772D10
CHILD_ADDRESS                  = 000000007C167840
CHILD_NUMBER                   = 0
REASON                         = <ChildNode><ChildNumber>0</ChildNumber><ID>7</ID><reason>Top Level RPI Cursor(0)</reason><size>2x4</size><ctxxyfl>3072</ctxxyfl><ispri>0</ispri></ChildNode>
--------------------------------------------------
SQL_TEXT                       = SELECT /*+ find_me */ COUNT(*) FROM EMP
SQL_ID                         = 3msqvmftys0rz
ADDRESS                        = 000000007D772D10
CHILD_ADDRESS                  = 000000007B96F830
CHILD_NUMBER                   = 1
TOP_LEVEL_RPI_CURSOR           = Y
REASON                         =
--------------------------------------------------
PL/SQL procedure successfully completed.
--//不能共享的原因还是Top Level RPI Cursor.

4.修改匿名块如下,继续测试:
$ cat a4.txt
declare
    a number  := 0;
begin
null;
select /*+ find_me */ count(*) into a from emp;
end ;
/

SCOTT@book> @ a4.txt
PL/SQL procedure successfully completed.

SCOTT@book> select sql_id,PARSE_CALLS,executions,child_number from v$sql where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SQL_ID        PARSE_CALLS EXECUTIONS CHILD_NUMBER
------------- ----------- ---------- ------------
3msqvmftys0rz           2          2            0
3msqvmftys0rz           1          1            1
6d4p4q16sp5gy           1          1            0
--//sql_id='3msqvmftys0rz',子光标0的PARSE_CALLS=2,增加1次.

SCOTT@book> select * from V$OPEN_CURSOR where sql_id in ('3msqvmftys0rz','6d4p4q16sp5gy');
SADDR            SID USER_NAME ADDRESS          HASH_VALUE SQL_ID        SQL_TEXT                                LAST_SQL_ACTIVE_TIM SQL_EXEC_ID CURSOR_TYPE
---------------- --- --------- ---------------- ---------- ------------- --------------------------------------- ------------------- ----------- --------------------
00000000854DC040 232 SCOTT     000000007D772D10 3018588927 3msqvmftys0rz SELECT /*+ find_me */ COUNT(*) FROM EMP                                 PL/SQL CURSOR CACHED

--//可以对于匿名块中的sql语句,无论如何都要分析,以后也都是软分析.

时间: 2024-09-20 16:54:49

[20170621]Session Cursor Caching 4.txt的相关文章

[20170621]Session Cursor Caching 2.txt

[20170621]Session Cursor Caching 2.txt --//当sql执行时,第一次要经历硬分析,第二次软分析,如果session_cached_cursors设置的化,还可以绕过软分析,也有人叫"软软分析". --//摘录链接的一段话: --//www.toadworld.com/platforms/oracle/b/weblog/archive/2017/04/12/session-cursor-caching-part-one When a SQL sta

[20160122]Caching Effects.txt

[20160122]Caching Effects.txt --看电子书<Apress.Expert.Oracle.SQL.Optimization.Deployment.and.Statistics.1430259779.pdf> --P391也提到的一个例子很有意思.自己记录一下: 1.环境: SCOTT@test> @ ver1 PORT_STRING                    VERSION        BANNER ------------------------

解读ASP.NET 5 &amp; MVC6系列(8):Session与Caching

原文:解读ASP.NET 5 & MVC6系列(8):Session与Caching 在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模块(middleware)了. 配置启用Session ASP.NET 5中的Session模块存在于Microsoft.AspNet.Session类库中,要启用Session,首先需要在project.json

[20120307]查看v$session视图的定义.txt

[20120307]查看v$session视图的定义.txt 今天查看v$session的原始定义,查询GV$FIXED_VIEW_DEFINITION SQL> column VIEW_DEFINITION format a100 SQL> select * from GV$FIXED_VIEW_DEFINITION where view_name='GV$SESSION';    INST_ID VIEW_NAME                      VIEW_DEFINITION

oracle等待事件5——库高速缓存上的等待事件 上

1.latch:shared pool 锁存器 shared pool锁存器起到保护堆(共享池的基本内存结构)的作用,为了查找free chunk,检索空闲列,分配适当的chunk,必要时分割空闲chunk的一连串工作,全部只能在获得shared pool 锁存器后才能发生,获得shared pool锁存器的过程中若发生争用,则等待latch:shared pool事件. 与堆相关的一连串的工作大部分在非常短的时间内结束,因此一般情况下不出现shared pool 锁存器争用,但是如下情况,可能

[20150316]dbms_shared_pool.keep.txt

[20150316]dbms_shared_pool.keep.txt --包dbms_shared_pool可以清除特定的sql从共享池,也可以pin某个包到共享池,特别是一些大存储过程,减少换入换出的情况,一定程 --度减少出现ora-4031错误.实际上也可以使用它pin相应的sql语句,自己测试看看. 1.建立测试环境: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER -------------

oracle中游标(Cursor)的详解

概述 也许大家对数据库中游标都不陌生,但对于其概念可能有时又会有些模糊,游标到底是什么? 为了使大家对游标有个清晰的认识,本文将介绍Oracle中游标(curosr)相关的知识. 游标的概念 一般来讲,游标包含着两种不同的概念: 程序中的游标(Program Cursor)和Oracle中的游标(Oracle Curosr). 程序中的游标(Program Cursor): 在最终用户程序(Client Application)中,游标(curosr)通常指和SQL语句关联的一个数据结构,用于关

[20170724]提示BIND_AWARE与PLSQL光标缓存

[20170724]提示BIND_AWARE与PLSQL光标缓存.txt --//[20170724]Bind Sensitivity and PLSQL cursor caching.txt --//曾经写过一个系列acs的文章.链接如下: http://blog.itpub.net/267265/viewspace-721817/ http://blog.itpub.net/267265/viewspace-1336242/ http://blog.itpub.net/267265/view

MySQL: 初试Memcached Plugin

Memcached Plugin对我而言是一个基本没触摸过的领域,因此本文会以一个"小白"的视角,开始一步步学习,从如何使用和源码实现的角度进行阐述. 关于Memcached的好处就不多说了,跳过语法解析和优化器,直达Innodb层,支持k-v操作,也就是所谓的NOSQL.同时你依然可以通过SQL来操作Innodb表. 官方文档列出的一大堆优点,见:http://dev.mysql.com/doc/refman/5.7/en/innodb-memcached-benefits.html