[20180822]session_cached_cursors与子游标堆0.txt

--//前几天测试刷新共享池与父子游标的问题,
--//链接: http://blog.itpub.net/267265/viewspace-2200066/=>[20180813]刷新共享池与父子游标.txt
--//我测试如果语句被回话缓存时,刷新共享池后,
--//父子游标,父游标堆0,子游标都没有清除.并且KGLHDLMD=1
--//子游标堆0,子游标堆6会被清除.
--//晚上看<oracle内核技术揭密>时,提到对于缓存的游标,子游标堆0的内存也不会被覆盖.进程在扫描LRU寻找可覆盖的chunk时,如果发
--//现子游标堆0,会检查它对应的子游标句柄上是否有1号Library cache lock.如果有,会将其从LRU中去掉,而子游标堆6就没有这种"待
--//遇".也就是这样方式父子游标,父游标堆0,子游标,子游标堆0都没有清除,仅仅子游标堆6会被清除.
--//与刷新共享池操作有一点点不同,差别在于子游标堆0是否被清除覆盖,我重复验证看看:

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

SCOTT@book> show parameter session_cached_cursors
NAME                   TYPE    VALUE
---------------------- ------- -----
session_cached_cursors integer 50

SCOTT@book> show parameter open_cursors
NAME         TYPE    VALUE
------------ ------- -----
open_cursors integer 300

SCOTT@book> alter system set open_cursors=50000 scope=memory;
System altered.

--//注意这个参数设置后要退出才会生效!!

2.测试:

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

SYS@book> @ &r/sharepool/shp4 4xamnunv51w9j 0
TEXT           KGLHDADR         KGLHDPAR         C40                                        KGLHDLMD   KGLHDPMD   KGLHDIVC KGLOBHD0         KGLOBHD6           KGLOBHS0   KGLOBHS6   KGLOBT16   N0_6_16        N20   KGLNAHSH KGLOBT03        KGLOBT09
-------------- ---------------- ---------------- ---------------------------------------- ---------- ---------- ---------- ---------------- ---------------- ---------- ---------- ---------- --------- ---------- ---------- ------------- ----------
子游标句柄地址 000000007D4B8000 000000007D4B8390 select * from dept where deptno=10                0          0          0 000000007D07E040 000000007D07E838       4528      12144       3067     19739      19739  911274289 4xamnunv51w9j          0
父游标句柄地址 000000007D4B8390 000000007D4B8390 select * from dept where deptno=10                0          0          0 000000007D0D6318 00                     4720          0          0      4720       4720  911274289 4xamnunv51w9j      65535

--//建立测试脚本,仅仅分析sql语句,不执行.这样利用前面设定open_cursor参数,消耗共享池内存.
create table a1( id1 number,id2 number);

$ cat ac.sql
declare
msql varchar2(500);
mcur number;
mstat number;
begin
    for i in 1 .. 49000 loop
        mcur := dbms_sql.open_cursor;
        msql := 'select id1 from a1 where id2='||to_char(i);
        dbms_sql.parse(mcur,msql,dbms_sql.native);
--        mstat := dbms_sql.execute(mcur);
    end loop;
end;
/

3.执行测试脚本:
SCOTT@book> @ ac.sql
--//等,报错!!
declare
*
ERROR at line 1:
ORA-04031: unable to allocate 32 bytes of shared memory ("shared pool","select job, nvl2(last_date, ...","SQLA","tmp")
ORA-06512: at "SYS.DBMS_SQL", line 1199
ORA-06512: at line 9

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

--//确实,子游标堆0没有清除.不过有点奇怪的是刷新共享池可以清除子游标堆0,不理解.

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

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

[20180822]session_cached_cursors与子游标堆0.txt的更多相关文章

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

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

  2. Oracle SQL 硬解析和子游标

    Oracle SQL 硬解析和子游标 What reasons will be happening sql hard parse and generating new child cursors 在一 ...

  3. 设子数组A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1)。试设计一个合并这2个子数组为排好序的数组A[0:N-1]的算法。

    设子数组A[0:k]和A[k+1:N-1]已排好序(0≤K≤N-1).试设计一个合并这2个子数组为排好序的数组A[0:N-1]的算法.要求算法在最坏情况下所用的计算时间为O(N),只用到O(1)的辅助 ...

  4. BZOJ3152[Ctsc2013]组合子逻辑——堆+贪心

    题目链接: BZOJ3152 题目大意: 一开始有一个括号包含[1,n],你需要加一些括号,使得每个括号(包括一开始的)所包含的元素个数要<=这个括号左端点那个数的大小,当一个括号包含另一个括号 ...

  5. Oracle触发bug(cursor: mutex S),造成数据库服务器CPU接近100%---SQL子游标多版本问题

    问题现象: 项目反馈系统反应非常缓慢,数据库服务器CPU接近100%! INSERT INTO GSPAudit1712(ID,TypeID,CategoryID,DateTime,UserID,Us ...

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

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

  7. 共享池之八:软解析、硬解析、软软解析 详解一条SQL在library cache中解析涉及的锁

    先来张大图: 结合上图来说明一下解析的各个步骤涉及的锁. 软解析.硬解析.软软解析区别的简单说明: 为了将用户写的sql文本转化为oracle认识的且可执行的语句,这个过程就叫做解析过程. 解析分为硬 ...

  8. 共享内存shared pool (6):追踪sql语句

    构建实验数据 --使用NC50用户查询(会话1) SQL> conn NC50/NC50 Connected. SQL> create table emp as select * from ...

  9. 共享内存shared pool (5):详解一条SQL在library cache中解析

    前面介绍的 shared pool,library cache结构,都是为了说明一条SQL是如何被解析的.先看下面的图: 图中涉及的各结构简单介绍 父HANDLE,里面有父游标堆0的地址.. 父游标堆 ...

随机推荐

  1. Mysql 锁和锁算法

    相关命令: show engines;  查看数据库支持的引擎 show variables like '%storage_engine%';   查看数据库默认的引擎 select @@global ...

  2. 简单快速的让你的json解析速度快上加快

    背景 最近小编在做公司的一个需求.要求是把系统内的一些大型文本文件上传到第三方那里,而且第三方要求的交互数据的方式是采用post请求发送json串的形式进行的. 问题 做到中途才发现问题,由于单个文本 ...

  3. CC2530微处理器接口开发技术——信号灯的设计与实现

    本问主要介绍了CC2530处理器的通用输入/输出接口(GPIO),以及GPIO的位操作,理解GPIO的基本原理和功能,最后使用C语言驱动CC2530的GPIO实现对信号灯的控制. CC2530的GPI ...

  4. 翻译:XtraDB/InnoDB中的AUTO_INCREMENT处理方式(已提交到MariaDB官方手册)

    本文为mariadb官方手册:XtraDB/InnoDB中的AUTO_INCREMENT处理方式的译文. 原文:https://mariadb.com/kb/en/auto_increment-han ...

  5. Redis 初次见面

    目录 Redis 特性 使用场景 初次使用 安装(Linux) 配置 启动 redis 的 3 种方法 使用 redis 客户端 关闭 redis 服务 Redis 版本说明 引用 1 Redis 特 ...

  6. Ajax的初级使用

    一.AJAX简介(本文的例子都使用的是原生的ajax) 老技术新用法二.异步和同步区别三.XMLHttpRequest对象(面试题) 属性: readyState: 0:未初始化 1:open方法已经 ...

  7. Transact-SQL解析和基本的实用语句

    SQL语言 DDL(数据定义语句) DML(数据操作语句) DCL(数据控制语句) DDL 数据定义 操作对象 操作方式 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 ...

  8. 【Spring】22、Spring缓存注解@Cache使用

    缓存注解有以下三个: @Cacheable      @CacheEvict     @CachePut @Cacheable(value=”accountCache”),这个注释的意思是,当调用这个 ...

  9. 用Python实现Zabbix-API 监控

    做运维的朋友应该知道,公司IDC机房经常有上架.下架.报修和报废的服务器.如果服务器数量很多的时候很容易造成监控遗漏.       大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统 ...

  10. Spring Cloud Feign 使用方法与性能优化

    1. feign自定义Configuration和root 容器有效隔离. 用@Configuration注解 不能在主@ComponentScan (or @SpringBootApplicatio ...