理解游标CURSOR,OPEN_CURSORS参数.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理解游标CURSOR,OPEN_CURSORS参数

理解游标CURSOR,OPEN_CURSORS参数以及视图V$OPEN_CURSOR, V$SESSION_CACHED_CURSOR游标概念: 游标的作用就是用于临时存储从数据库中提取的数据块,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。Cursor游标分两种,一种是Shared cursor,位于SGA的一种library cache object,通常我们所说的SQL的父cursor,child cursor就是指这一类; 另一种是Session cursor,是SQL的一个内存工作区(或者内存结构),位于PGA的UGA部分,为了使每一个SQL的会话拥有单独的1个私有SQL区(PrivateSQL Area),一次只处理1个SQL,私有SQL区包含了绑定变量信息及运行时期内存结构。一个session cursor只能对应一个shared cursor,而一个shared cursor却可能同时对应多个session cursor。通常open_cursors参数配置的便是1个session的最大Session cursors。即1个session最多可以拥有多少个PrivateSQL Area,直白一点就是1个session最多能在UGA保存多少个不同的SQL语句的信息(包括绑定变量信息,与Shared cursor的关联信息),超过则一些执行频度低的游标会关闭。私有SQL区包括 永久区:包含绑定变量信息。当游标关闭时被释放。运行区:当执行结束时释放。“软软解析”: 当某个session cursor和其对应的shared cursor建立关联后,如果把cursor_space_for_time调成true(有利有弊,需要SGA和PGA都足够大),当一个session cursor处理完一条sql后,它就不会被destroy,Oracle会把其cache起来(我们称之为soft closed session cursor),这么做的目的是很明显的,因为这个soft closed掉的sessioncursor已经和包含其执行计划和parse tree的shared cursor建立了联系,那么当在这个session中再次执行同样的sql的时候,Oracle就不再需要去扫描library cache了,直接把刚才已经soft closed掉的session cursor拿过来用就好了,这就是所谓的软软解析。查询opened cursorsOPEN_CURSOR,定义每个Session最大能够打开的游标数量。在init.ora文件中定义,可以通过select * from v$parameter where name = open_cursors查询。 查询真正意义上的打开着的游标:select sum(a.value), b.namefrom v$sesstat a, v$statname bwhere a.statistic# = b.statistic#and b.name = opened cursors currentgroup by b.name;V$OPEN_CURSOR,包含多种CURSOR_TYPE的游标SESSION CURSOR CACHED,包括;可以通过以下SQL查询当前系统的游标类型及数量:select kgllkmod, kgllkctp, count(*) from X$KGLLK where KGLHDNSP = 0 group by kgllkmod, kgllkctp; KGLLKMOD KGLLKCTP COUNT(*) ---------- --------------------------- ---------- 1 SESSION CURSOR CACHED 32 1 DICTIONARY LOOKUP CURSOR CACHED 96 1 OPEN-RECURSIVE 42 1 PL/SQL CURSOR CACHED 19 1 OPEN 216而不是曾经打开的游标。 V$SESSION_CACHED_CURSOR,当前Session已经关闭并被缓存的游标。 V$OPEN_CURSOR中显示的当前Session游标缓存中游标,如果要精确查询当前Session打开的游标总数,需要从V$ SESSTAT中查询。 select a.value, s.username, s.sid, s.serial# from v$sesstat a, v$statna

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档