欢迎来到天天文库
浏览记录
ID:38808024
大小:21.96 KB
页数:6页
时间:2019-06-19
《理解游标CURSOR,OPEN_CURSORS参数》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、理解游标CURSOR,OPEN_CURSORS参数以及视图V$OPEN_CURSOR,V$SESSION_CACHED_CURSOR游标概念:游标的作用就是用于临时存储从数据库中提取的数据块,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。Cursor游标分两种,一种是Sharedcursor,位于SGA的一种librarycacheobject,通常我们所说的SQL的
2、父cursor,childcursor就是指这一类;另一种是Sessioncursor,是SQL的一个内存工作区(或者内存结构),位于PGA的UGA部分,为了使每一个SQL的会话拥有单独的1个私有SQL区(PrivateSQLArea),一次只处理1个SQL,私有SQL区包含了绑定变量信息及运行时期内存结构。一个sessioncursor只能对应一个sharedcursor,而一个sharedcursor却可能同时对应多个sessioncursor。通常open_cursors参数配置的便是1个session的最大Se
3、ssioncursors。即1个session最多可以拥有多少个PrivateSQLArea,直白一点就是1个session最多能在UGA保存多少个不同的SQL语句的信息(包括绑定变量信息,与Sharedcursor的关联信息),超过则一些执行频度低的游标会关闭。私有SQL区包括永久区:包含绑定变量信息。当游标关闭时被释放。运行区:当执行结束时释放。“软软解析”:当某个sessioncursor和其对应的sharedcursor建立关联后,如果把cursor_space_for_time调成true(有利有弊,需要SG
4、A和PGA都足够大),当一个sessioncursor处理完一条sql后,它就不会被destroy,Oracle会把其cache起来(我们称之为softclosedsessioncursor),这么做的目的是很明显的,因为这个softclosed掉的sessioncursor已经和包含其执行计划和parsetree的sharedcursor建立了联系,那么当在这个session中再次执行同样的sql的时候,Oracle就不再需要去扫描librarycache了,直接把刚才已经softclosed掉的sessioncur
5、sor拿过来用就好了,这就是所谓的软软解析。查询openedcursorsOPEN_CURSOR,定义每个Session最大能够打开的游标数量。在init.ora文件中定义,可以通过select*fromv$parameterwherename='open_cursors'查询。查询真正意义上的打开着的游标:selectsum(a.value),b.namefromv$sesstata,v$statnamebwherea.statistic#=b.statistic#andb.name='openedcursorscu
6、rrent'groupbyb.name;V$OPEN_CURSOR,包含多种CURSOR_TYPE的游标SESSIONCURSORCACHED,包括;可以通过以下SQL查询当前系统的游标类型及数量:selectkgllkmod,kgllkctp,count(*)fromX$KGLLKwhereKGLHDNSP=0groupbykgllkmod,kgllkctp;KGLLKMODKGLLKCTPCOUNT(*)-----------------------------------------------1SESSIONC
7、URSORCACHED321DICTIONARYLOOKUPCURSORCACHED961OPEN-RECURSIVE421PL/SQLCURSORCACHED191OPEN216而不是曾经打开的游标。V$SESSION_CACHED_CURSOR,当前Session已经关闭并被缓存的游标。V$OPEN_CURSOR中显示的当前Session游标缓存中游标,如果要精确查询当前Session打开的游标总数,需要从V$SESSTAT中查询。selecta.value,s.username,s.sid,s.serial#fr
8、omv$sesstata,v$statnameb,v$sessionswherea.statistic#=b.statistic#ands.sid=a.sidandb.name='openedcursorscurrent';SessionCache的原理:当设定SESSION_CACHED_CURSOR的值之后,当有parse请求
此文档下载收益归作者所有