




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理解游标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), from v$sesstat a, v$statname bwhere a.statistic# = b.statistic#and = opened cursors currentgroup by ;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$statname b, v$session s where a.statistic# = b.statistic# and s.sid=a.sid and = opened cursors current; Session Cache的原理:当设定SESSION_CACHED_CURSOR的值之后,当有parse请求的时候,Oracle会从library cache中查询。如果有超过3次同样的parse请求,这个游标将会存入Session的游标缓存中。对于将来同样的查询,就甚至不要soft parse,直接从Session的游标缓存中取。 验证:登录两个SQL*PLUS客户端,分别为Session test和Session monitor。 1. 检查是否参数设置,以及执行的SQL语句是否在V$OPEN_CURSOR找到。 Session Test: SQL show parameter session_cached_cursors; NAME TYPE VALUE - session_cached_cursors integer 0 SQL select sid from v$mystat where rownum=1; SID - 9 SQL select sid from v$mystat where rownum=1; SID - 9 通过如上的执行结果可以知道,当前参数设置session_cached_cursors的值为0,不缓存当前Session关闭的游标。当前Session的ID为9。 Session Monitor: SQL SELECT SID, n.NAME para_name, s.VALUE used 2 FROM SYS.v_$statname n, SYS.v_$sesstat s 3 WHERE n.NAME IN (opened cursors current, session cursor cache count) 4 AND s.statistic# = n.statistic# 5 AND SID = 9; SID PARA_NAME USED - - - 9 opened cursors current 19 session cursor cache count 0 SQL select SID, USER_NAME,SQL_TEXT from v$open_cursor where sid=9; SID USER_NAME SQL_TEXT - - -9 SCOTT select sid from v$mystat where rownum=1 通过如上的执行结果可以知道,当前在V$OPEN_CURSOR存储一个游标,对应SQL为Session Test执行的最后一条语句。V$SESSION_CACHED_CURSOR没有存储游标。 2. 更改参数V$SESSION_CACHED_CURSOR值。 Session Test: SQL alter session set session_cached_cursors = 1; Session altered. SQL show parameter session_cached_cursors; NAME TYPE VALUE - - -session_cached_cursors integer 1 3. 验证如下结论。如果游标被存入SESSION_CACHED_CURSOR,前提是游标已经关闭,游标对应的SQL被执行3次以上。OPEN_CURSOR中会存储保存在SESSION_CACHED_CURSOR以及打开的游标(不是精确值)。 Session Test: SQL select sid from v$mystat where rownum =1; SID - 9 SQL select sid from v$mystat where rownum =1; SID - 9 SQL select sid from v$mystat where rownum =1; SID - 9 Session Monitor: SQL select SID, USER_NAME,SQL_TEXT from v$open_cursor where sid=9; SID USER_NAME SQL_TEXT - - -9 SCOTT select sid from v$mystat where rownum =1 SQL SELECT SID, n.NAME para_name, s.VALUE used 2 FROM SYS.v_$statname n, SYS.v_$sesstat s 3 WHERE n.NAME IN (opened cursors current, session cursor cache count) 4 AND s.statistic# = n.statistic# 5 AND SID = 9; SID PARA_NAME USED - - - 9 opened cursors current 1 9 session cursor cache count 0 v$open_cursor dooes not show all open cursors. it shows more than that, the best option to find the number of open cursors is from v$sysstat. 通过如上的执行结果可以知道,即使同一个游标被打开3次,在SESSION_CACHED_CURSOR的数量仍然为0。下面,将会在Session Test中关闭游标(通过执行一条其他的语句)。 Session Test: SQL select * from t where rownum!=7; no rows selected Session Monitor: SQL SELECT SID, n.NAME para_name, s.VALUE used 2 FROM SYS.v_$statname n, SYS.v_$sesstat s 3 WHERE n.NAME IN (opened cursors current, session cursor cache count) 4 AND s.statistic# = n.statistic# 5 AND SID = 9; SID PARA_NAME USED - - - 9 opened cursors current 1 9 session cursor cache count 1 SQL select SID, USER_NAME,SQL_TEXT from v$open_cursor where sid=9; SID USER_NAME SQL_TEXT - - -9 SCOTT select sid from v$mystat where rownum=1 9 SCOTT select * from t where rownum!=7 通过如上的执行结果可以知道,游标被打开3次之后,如果这个游标关闭之后,游标会被存储到SESSION_CACHED_CURSOR当中。同时,通过OPEN_CURSOR中显示的SQL可以得知,OPEN_CURSOR中会存储保存在SESSION_CACHED_CURSOR以及打开的游标(不是精确值)。 其他:SESSION_CACHED_CURSOR采用的是LRU算法,如果如果有新的游标需要缓存,而当前游标缓存已经满,最少使用的游标将会被清除出去。调整SESSION_CACHED_CURSOR参数。通过如下SQL得到从缓存中取游标以及取PARSE的数量,为调整作参考。 select cach.value cache_hits, prs.value all_parses, prs.value-cach.value sess_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳山小学考试试卷及答案
- 2.2任务二花卉的分株繁殖 说课稿 2024-2025学年浙教版初中劳动技术七年级下册
- 2025年滨州市实验小学六年级第二十三单元测试数学试卷新课
- 成人经口气管插管机械通气患者口腔护理
- 2025年起重机械指挥证模拟考试题库及答案
- 2025年高考生物试题分类汇编体液调节(解析版)
- 人工智能应用基础 课件 项目4 人工智能开发与技术应用
- 2025年山东省青岛市中考化学试题(解析版)
- 2025购物中心省级区域代理合同
- 小班图形规律题目及答案
- 2022版《道德与法治新课程标准》课标测试卷测试题库(含答案)(教师招聘试卷教资考试)
- 平、坡、刚性屋面防水施工技术培训讲义
- 《思想道德与法治》2021版教材绪论
- 《民俗学概论》讲义中国海洋大学
- office办公软件培训课件
- 【完美排版】山东科技出版社二年级上册综合实践活动教案
- 小学四年级数学下册应用题100道(全) 含答案
- 中西医结合科临床技术操作规范
- DB14∕T 1217-2016 粉煤灰与煤矸石混合生态填充技术规范
- 《深度学习-走向核心素养》读书笔记
- 重大质量问题处理流程
评论
0/150
提交评论