首页 > 数据库 >[转帖]Oracle SQL调优系列之cursor学习笔记

[转帖]Oracle SQL调优系列之cursor学习笔记

时间:2024-01-29 09:15:54浏览次数:31  
标签:session 转帖 缓存 句柄 cursor 调优 sql 解析

https://cloud.tencent.com/developer/article/1995387

 

文章目录

- [一、oracle库缓存](https://cloud.tencent.com/developer)
    - [1.1、库缓存简介](https://cloud.tencent.com/developer)
    - [1.2、相关概念](https://cloud.tencent.com/developer)
    - [1.3、库缓存结构](https://cloud.tencent.com/developer)
    - [1.4、sql执行过程简介](https://cloud.tencent.com/developer)
- [二、oracle cursor](https://cloud.tencent.com/developer)
    - [2.1、cursor分类](https://cloud.tencent.com/developer)
    - [2.2、shared cursor](https://cloud.tencent.com/developer)
    - [2.3、session cursor](https://cloud.tencent.com/developer)
    - [2.4、sql执行过程](https://cloud.tencent.com/developer)

最近在看《基于oracle的sql优化》一书,并做了笔记

一、oracle库缓存

1.1、库缓存简介

介绍oracle cursor(游标)之前先,介绍一下oracle的库缓存,Oracle库缓存(Library Cache)是SGA中的一块内存区域,它的主要作用是缓存刚刚执行过的SQL语句或者PL/SQL语句(比如存储过程、函数、触发器、包)所对应的执行计划、解析树、Pcode,Mcode等对象,SGA相关知识可以参考我之前笔记:https://cloud.tencent.com/developer/article/1426640

1.2、相关概念

  • 库缓存对象:缓存在库缓存中的对象称之为库缓存对象(Library Cache Object),库缓存对象都是以库缓存对象句柄(Library Cache Object Handle)的结构存储在库缓存中的
  • 库缓存对象句柄:所谓的库缓存对象句柄其实就是一种C语言定义的复杂结构,库缓存对象句柄以哈希表(Hash table)的方式存储在库缓存中

1.3、库缓存结构

Oracle库缓存的结构,图来自《基于Oracle的SQL优化》一书:

库缓存是由一组Hash Buckets组成的,Hash Buckets里面存储的hash值相同的库缓存对象句柄,而Hash Buckets中不同的库缓存对象句柄是以指针的方式连接起来的,从而组成一条库缓存对象句柄链表

1.4、sql执行过程简介

所以执行sql的过程,会将sql的文本进行hash运算,得到对象的hash值,然后拿hash值,去Hash Buckets里遍历缓存对象句柄链表,找到对应的缓存对象句柄,然后就可以得到缓存对象句柄里对应sql执行计划、解析树等对象,所以执行相同的sql第二次执行时是会比较快的,因为不需要解析获取执行计划,解析树等对象,如果找不到库缓存对象句柄,就需要重新解析,这个过程解析过多,容易造成硬解析问题

硬解析:是指Oracle在执行目标SQL时,在库缓存中找不到可以重用的解析树和执行计划,而不得不从头开始解析目标SQL并生成相应的Parent Cursor和Child Cursor的过程。 软解析:是指Oracle在执行目标SQL时,在Library Cache中找到了匹配的Parent Cursor和Child Cursor,并将存储在Child Cursor中的解析树和执行计划直接拿过来重用,无须从头开始解析的过程。

二、oracle cursor

2.1、cursor分类

oracle的cursor其实就是库缓存对象,Oracle中的cursor分为两种,一种是shared cursor,另外一种是session cursor

2.2、shared cursor

shared cursor存储目标SQL的sql文本、解析树、该sql使用的绑定变量类型和长度、以及该SQL的执行计划等信息

oracle中的shared cursor又细分为parent cursor和child cursor,我们可以通过分别查询视图vSQLAREA和v SQL来获取存储在parent cursor和child cursor中的缓存信息

其实parent cursor和child cursor结构是类似的,解析sql时候,sql文本是存储在parent cursor的缓存对象句柄的属性name中,而执行计划和解析树是存储在child cursor的属性heap6中的,然后parent cursor和child cursor是怎么关联的?在parent cursor的属性heap0中存储的是child cursor缓存对象句柄的地址,然后就可以知道属于这个parent cursor的所有child cursor

2.3、session cursor

session cursor是用于在当前session中解析和执行SQL,session cursor也是C语言定义的一种结构,也是以哈希表的结构存储的,不过是存储在PGA中的

  • session是和session cursor对应的,不同session的session cursor是无法共享的
  • session cursor是有生命周期的,每个session cursor在使用过程都至少会经历一次Bind、Execute、Fetch和Close中的一个或多个过程

oracle第一次解析和执行sql时,会新生成一个session cursor和一对shared cursor(parent cursor和child cursor),而其中的shared cursor会存储能被所有session共享、重用的内容(比如执行计划,解析树等),而session cursor会经历一次open、parse、bind、execute、fetch和close的一个或多次阶段

2.4、sql执行过程

综上所述,oracle执行sql过程都会先去session cursor里面找,能找到就能通过关联找到parent cursor,假如找不到,就要重新生成session cursor和一对shared cursor(parent cursor和child cursor),假如child cursor找不到,也会重新生成session cursor和child cursor

标签:session,转帖,缓存,句柄,cursor,调优,sql,解析
From: https://www.cnblogs.com/jinanxiaolaohu/p/17987046

相关文章

  • [转帖]被玩坏的替尼
    https://yao.dxy.cn/article/92108 眼下,最让朱迅头疼的是他接手审评的申报项目,“严重雷同得简直惨不忍说!”朱迅是国家新药评审委员会委员,另一个身份是创投机构的顾问。公开资料显示,2014年上半年申报的化药1.1类新药品种中,比例最大的抗肿瘤药物已占据1/4,几乎都叫“某......
  • R语言KNN模型分类信贷用户信用等级参数调优和预测可视化
    全文链接:https://tecdat.cn/?p=34941原文出处:拓端数据部落公众号本文主要介绍了如何帮助客户通过读取数据、查看部分数据、转换数据为因子并将数值变量归一化、进行描述性分析、建立knn模型等步骤对数据进行分析。通过分别选择不同的k值进行建模,并对比它们的准确度,找到最优的参......
  • [转帖]父游标、子游标及共享游标
    https://www.cnblogs.com/roucheng/p/oracleyoubiao.html 游标是数据库领域较为复杂的一个概念,因为游标包含了sharedcursor和sessioncursor。两者有其不同的概念,也有不同的表现形式。共享游标的概念易于与SQL语句中定义的游标相混淆。本文主要描述解析过程中的父游标,子游......
  • 【转帖】贲门癌的治疗方式
    作者:掌上药店APP链接:https://www.zhihu.com/question/54874729/answer/3212201832来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。贲门癌又称食管胃结合部癌(EGJ),是发生在胃和食管交界部位的恶性肿瘤。贲门癌早期无症状,一旦出现吞咽困难、上腹不适等......
  • [转帖]Oracle replay工具用法
    一、简介Oracle11g推出的神器,可以抓取生产环境真实负载(sql语句),在目标环境重演,进行对比。在核心生产环境迁移等重大变更前,尽量确定变更带来的影响。核心步骤包括:准备工作、捕获负载、预处理负载、重演负载、对比分析,每步又包含多个子步骤,下面通过测试案例来看。二、准备......
  • [转帖]Oracle中的游标、硬解析、软解析、软软解析、解析失败
    https://developer.aliyun.com/article/283561 一、  游标的分类及共享游标游标(Cursor)是Oracle数据库中SQL解析和执行的载体,它可以分为共享游标(SharedCursor)和会话游标(SessionCursor)。共享游标可以细分为父游标(ParentCursor)和子游标(ChildCursor),可以通过视图V$SQLAREA......
  • [转帖]一文搞懂各种数据库SQL执行计划:MySQL、Oracle等
    https://zhuanlan.zhihu.com/p/99331255 14人赞同了该文章MySQL执行计划Oracle执行计划SQLServer执行计划PostgreSQL执行计划执行计划(executionplan,也叫查询计划或者解释计划)是数据库执行SQL语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连......
  • [转帖]内存(DDR/DDR2/DDR3/DDR4)的速度等级和时钟频率
    以下全部图片均来自镁光(Micron)公司产品的数据手册。DDR:以MT48LCxx型号的DDR内存芯片为例,数据手册中给出如图1所示的一个表格。从表格中可以看出它的主频(ClockFrequency)。图1不同速度等级的DDR主频它的主频与传输数据的频率相同。我们可以从时序图中观察出来。随便......
  • [转帖]3 分钟了解 NVIDIA 新出的 H200
    https://zhuanlan.zhihu.com/p/439633733内存带宽应该是9.6*1024*6算出来来的实际值4.8TB/S和内存141G应该是进行了一些删减理论上是六个24GB的HBM3e的内存.应该是为了安全和稳定进行了限速不然理论上可以达到接近6BG的带宽和144G的HBM3e的内存大小.英伟......
  • [转帖]肿瘤治疗的疗效评估 CR、PR、SD、PD,ORR,DCR
    https://zhuanlan.zhihu.com/p/518260265 我们一起来了解一下这几个概念的定义:CR、PR、SD、PD,ORR,DCR这些都采用实体瘤疗效评价标准RECIST(不同肿瘤类型会略有差别),用于评估肿瘤治疗的疗效评估。完全缓解(Completeresponse,CR):所有肿瘤靶病灶消失,无新病灶出现,且肿瘤标志物......