[20180813]刷新共享池与父子游标.txt

--//测试刷新共享池与父子游标含有那些信息保存在共享池.
--//自己最近遇到的问题,感觉自己以前理解有点乱,测试看看.

1.环境
SCOTT@book> @ 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

2.测试:

--//session 1:
select * from dept where deptno=10;
--//确定sql_id=4xamnunv51w9j,可以查询v$sql视图确定.

--//session 2:
SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D9134A0 000000007D7110E0 select * from dept where deptno=10                1          0 000000007D6F2250 000000007BFF1138       4488      12144       3067     19699      19699  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007D7110E0 000000007D7110E0 select * from dept where deptno=10                1          0 000000007D9E7608 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535
--//全部父子光标,父堆0.子堆0,6都在.KGLHDLMD=1.当前session 1,执行完该条语句,11g下游标不会释放.

SYS@book> alter system flush shared_pool;
System altered.

SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D9134A0 000000007D7110E0 select * from dept where deptno=10                1          0 00               00                        0          0       3067      3067       3067  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007D7110E0 000000007D7110E0 select * from dept where deptno=10                1          0 000000007D9E7608 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535

--//父子游标,父游标堆0,子游标都没有清除.并且KGLHDLMD=1
--//子游标堆0,子游标堆6清除.
--//当前执行的语句,游标不会关闭,刷新共享池,并不能父子游标,父游标堆0,子游标.
--//是否可以这么理解KGLHDLMD=1的情况下,不会清除全部信息.

--//session 1:
SCOTT@book> select sysdate from dual;
SYSDATE
-------------------
2018-08-14 09:00:11

--//session 2:
SYS@book> alter system flush shared_pool;
System altered.

SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
no rows selected

--//可以发现光标已经全部清除.因为session 1当前执行的是 select sysdate from dual;.
--//sql_id=4xamnunv51w9j的游标已经关闭.这样刷新共享池,可以完全清除.
--//忘记在刷新前看看游标的情况,补充测试3.

3.测试:
--//session 1:
select * from dept where deptno=10;
select sysdate from dual;
--//注意当前语句不是select * from dept where deptno=10;.

--//session 2:
SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D8A5B98 000000007DB3C798 select * from dept where deptno=10                0          0 000000007D72DD88 000000007C9A8358       4520      12144       3067     19731      19731  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007DB3C798 000000007DB3C798 select * from dept where deptno=10                0          0 000000007DAFF9F0 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535

--//全部父子光标,父堆0.子堆0,6都在.KGLHDLMD=0.

SYS@book> alter system flush shared_pool;
System altered.

SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
no rows selected

4.测试:
--//测试会话缓存光标的情况.
--//session 1:
SCOTT@book> show parameter session_cached_cursors
NAME                   TYPE    VALUE
---------------------- ------- -----
session_cached_cursors integer 50

select * from dept where deptno=10;
select sysdate from dual;
select * from dept where deptno=10;
select sysdate from dual;
select * from dept where deptno=10;
select sysdate from dual;
select * from dept where deptno=10;
select sysdate from dual;
--//执行3次以上,注意最后一条语句是select sysdate from dual;

--//session 2:
SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D4BB278 000000007D4BB608 select * from dept where deptno=10                1          0 000000007D4BB1C0 000000007BA63988       4528      12144       3067     19739      19739  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007D4BB608 000000007D4BB608 select * from dept where deptno=10                1          0 000000007D4BF948 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535

--//执行3次以后,KGLHDLMD=1.
--//你可以在每次执行select sysdate from dual;查看sql_id=4xamnunv51w9j光标情况.
--//仅仅第3次后KGLHDLMD=1.

SYS@book> alter system flush shared_pool;
System altered.

SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D4BB278 000000007D4BB608 select * from dept where deptno=10                1          0 00               00                        0          0       3067      3067       3067  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007D4BB608 000000007D4BB608 select * from dept where deptno=10                1          0 000000007D4BF948 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535

--//父子游标,父游标堆0,子游标都没有清除.并且KGLHDLMD=1
--//子游标堆0,子游标堆6清除.
--//当前执行的语句不是该条,但是当会话缓存游标以后,刷新共享池,并不能清除父子游标,父游标堆0,子游标.
--//也就是刷新共享池无法完全清除会话缓存的光标.

--//附上shp4.sql脚本:
$ cat sharepool/shp4.sql
column N0_6_16 format 99999999
SELECT DECODE (kglhdadr,
               kglhdpar, '父游标句柄地址',
               '子游标句柄地址')
          text,
       kglhdadr,
       kglhdpar,
       substr(kglnaobj,1,40) c40,
           KGLHDLMD,
           KGLHDPMD,
--         kglhdivc,
       kglobhd0,
       kglobhd6,
       kglobhs0,kglobhs6,kglobt16,
       kglobhs0+kglobhs6+kglobt16 N0_6_16,
           kglobhs0+kglobhs1+kglobhs2+kglobhs3+kglobhs4+kglobhs5+kglobhs6+kglobt16 N20,
           kglnahsh,
           kglobt03 ,
           kglobt09
  FROM x$kglob
 WHERE kglobt03 = '&1'  or kglhdpar='&1' or kglhdadr='&1' or KGLNAHSH= &2;

[20180813]刷新共享池与父子游标.txt的更多相关文章

  1. [20180819]关于父子游标问题(11g).txt

    [20180819]关于父子游标问题(11g).txt --//sql语句存在父子游标,子游标堆6在父游标堆0里面.--//如果存在许多子游标的情况下,父游标堆0是否大小是发生变化呢.测试看看.--/ ...

  2. 将指定SQL的执行计划从共享池删除的方法

    如果Oracle的优化器产生了某种错误的执行计划,或者我们希望Oracle对于某个SQL重新进行分析,那么就需要这个SQL的执行计划在共享池中过期,而简单的方法在10.2.0.4以后才出现.   对于 ...

  3. [20180926]共享池中的NETWORK BUFFER.txt

    [20180926]共享池中的NETWORK BUFFER.txt --//最近几天一直在探究SQL*Net more data from client 相关等待事件,发现SDU相关,自己也网上探究一 ...

  4. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  5. Oracle 从共享池删除指定SQL的执行计划

    ORACLE从共享池删除指定SQL的执行计划 2016-12-29 11:14 by 潇湘隐者, 2836 阅读, 0 评论, 收藏, 编辑 Oracle 11g在DBMS_SHARED_POOL包中 ...

  6. 使用DBMS_SHARED_POOL包将对象固定到共享池

    使用DBMS_SHARED_POOL包将对象固定到共享池2011年06月24日 09:45:00 Leshami 阅读数:5808 版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处. htt ...

  7. Oracle sql共享池$sqlarea分析SQL资源使用情况

    遇到需要排查一个系统使用sql的情况,可以通过查询Oracle的$sql.$ssssion.$sqlarea进行统计排查 排查时可以先看一下$sql和$session的基本信息 select * fr ...

  8. [20190306]共享服务模式与SDU.txt

    [20190306]共享服务模式与SDU.txt --//一些文档提到共享服务模式,服务端SDU=65535,测试验证看看.--//链接:https://blogs.sap.com/2013/02/0 ...

  9. oracle 共享池( shared pool )

    Oracle共享池 Oracle共享池(Share Pool)属于SGA,由库高速缓存(library cache)和数据字典高速缓存(data dictionary cache)组成. 库高速缓存 ...

随机推荐

  1. Redux 实现过程的推演

    这是一篇浅入浅出的 Redux 实现过程的推演笔记!正常来说应该是要从源码下手开始解析,这里是逆向推演,假如有需求是要这么一个东西,那么该如何从零开始实现? 通过该笔记,更多的是希望自己能够多熟悉从无 ...

  2. Chapter 4 Invitations——1

    In my dream it was very dark, and what dim light there was seemed to be radiating from Edward's skin ...

  3. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  4. Disruptor 为什么这么快?

    为什么Disruptor不使用队列来实现RingBuffer   队列有两个指针,一个指向队头,一个指向队尾.如果有超过一个生产者想要往队列里放东西,尾指针就将成为一个冲突点,因为有多个线程要更新它. ...

  5. Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  6. Hive基础之Hive数据类型

    Hive数据类型 参考:中文博客:http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843448.html          英文:https: ...

  7. OOP面向对象

    一:什么是面向过程 我们是怎么思考和解决上面的问题呢? 答案是:我们自己的思维一直按照步骤来处理这个问题,这是我们的常规思维,这就是所谓的面向过程POP编程   二:面向过程POP为什么转换为OOP ...

  8. 数据库部分(MySql)_2

    分组查询 分组查询通常和聚合函数结合使用,查询条件中每个XXX就以XXX为分组的条件: 格式:每个A的平均B select avg(B) from 表名 group by A; having 在whe ...

  9. Docker镜像目录无法删除

    docker pull下来的镜像目录默认放在:C:\ProgramData\docker\windowsfilter.由于拉下来的镜像已经几乎占满了C盘的空间,准备删除所有的镜像,却发现删除不掉. 搜 ...

  10. .NET面试题01-值类型与引用类型

    常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还是值类型?enum.int[]和string呢? 4. 堆和栈的区别? 5. 什么情况下会在堆 ...