ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【Oracle】Oracle Cursor(游标)

2021-07-06 08:02:21  阅读:144  来源: 互联网

标签:缓存 游标 Cursor Session SQL Oracle


Cursour(游标)是Oracle数据库中解析SQL和执行SQL的载体。

Shared Cursor

定义

Shared Cursor是指缓存在库缓存里SQL语句和匿名PL/SQL对应的SQL文本、解析树、目标SQL涉及的对象、目标SQL中的绑定变量及SQL的执行计划等信息。

查询方式

Shared Cursor又细分为Parent Cursor(父游标)和Child Cursor(子游标)两种。V$SQLAREA可查看Parent Cursor,V$SQL可查看Child Cursor(CHILD_NUMBER值从0开始)。Parent Cursor和Child Cursor均已库缓存对象句柄的方式缓存在库缓存中,Namespace为CRSR。

父子游标的区别和联系

  1. 目标SQL的SQL文本存储在Parent Cursor所对应库缓存对象句柄的Name属性中,Child Cursor的Name属性为空;
  2. 目标SQL的解析树和执行规则会存储在Child Cursor对应库缓存对象句柄的Heap 6中;
  3. Parent Cursor的Heap 0中存储了该父游标对应的所有子游标库缓存对象句柄地址。

缘由

由于不同目标SQL的文本对应的哈希值可能相同,且同一个目标SQL也可能存在多份不同的解析树和执行计划。为了尽量减少对应Hash Bucket中库缓存对象句柄链表的长度,同时减少Oracle检索库缓存对象句柄链表所消耗的时间和工作量,Oracle父子游标并存的结构一直延续至今。

Session Cursor

定义

Session Cursor是解析和执行SQL的载体,Session Cursor也是以哈希表的方式缓存起来,只不过是缓存在PGA中。

注意事项

  1. Session Cursor和Session一一对应,不同的Session的Session Cursor之间没法共享
  2. Session Cursor有生命周期,在使用过程中都至少会经历一次Open、Parse、Bind、Execute、Fetch和Close中的一个或多个阶段
  3. Session Cursor也是以哈希表的方式缓存在PGA中,Oracle会同样根据哈希运算来存储和访问当前Session对应PGA中Session Cursor
  4. 一个Session Cursor对应一个Shared Cursor,一个Shared Cursor可以同时对应多个Session Cursor
  5. 一个Session Cursor能够被缓存在PGA中的必要条件是该Session Cursor所对应的SQL解析和执行次数要超过3次

作用

  • 解析和执行目标SQL
  • Oracle依靠Session Cursor将目标SQL所涉及的数据从Buffer Cache的对应数据块读到PGA,然后PGA做后续处理(排序、表连接)

相关参数

参数 描述
OPEN_CURSORS 设定单个Session中同时以Open状态并存的Session Cursor的总数
SESSION_CACHED_CURSORS 设定单个Session中能够以Soft Closed状态并存的Session Cursor总数
CURSOR_SPACE_FOR_TIME Oracle 11gR1之前的版本用来减少库缓存相关Latch争用,副作用是增加Shared Pool压力

分类

  1. 隐式游标(Implicit Cursor)
  2. 显式游标(Explicit Cursor)
  3. 参考游标(Ref Cursor)

在这里插入图片描述

标签:缓存,游标,Cursor,Session,SQL,Oracle
来源: https://www.cnblogs.com/henry-chr/p/14975168.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有