当前位置: 首页 > news >正文

oracle共享池(shared pool):一、工作原理、组成部分 二、软硬解析过程

文章目录

  • oracle整体结构图
  • 共享池(shared pool)
    • shared pool的作用
    • shared pool的组成
    • 查询 shared pool 各组成部分大小
    • 硬解析和软解析


oracle整体结构图

在这里插入图片描述

共享池(shared pool)

shared pool的作用

1、 将 sql 语句解析成执行计划

2、 对执行计划进行执行,读取数据

3、 将读取到的数据返回给客户端

解析====》执行===》返回,此处涉及到“解析”,下文将详细分析和总结,

shared pool的组成

在这里插入图片描述
① free 空间

② 库缓存,用于缓存 SQL 语句和执行计划,比如最近执行过的sql语句、pl/sql过程和包

③ 字典缓存,存储数据库自己本身的信息,包括数据字典,比如:表的定义,口令,表的结构,用户名,权限等信息,尽可能多的熟悉数据字典,才能更好的掌握oracle,相关free、libaray cache、shared pool等相关大小情况都可以在v$sgastat (内存字典)中进行查看,方便数据库监控、管理以及后期通过修改参数来改变大小空间

查询 shared pool 各组成部分大小

1、select * from v$sgastat a where a.name= ’ library cache ’ ;查看库缓存大小信息

2、select * from v$sgastat a where a.pool =‘shared pool’ and a.name=‘free memory’;查看共享大小和空闲大小信息

3、select * from v$sgastat a where a.name=‘row cache’;查看字典缓存大小

硬解析和软解析

在 shard pool 中,前台进程会将 SQL 语句解析成执行计划,这部分中解析方式有两种:硬解析和软解析。

1、oracle执行sql的步骤过程:

1.1、语法检查(syntax check)
检查此sql的拼写是否语法。
1.2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。

1.3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
1.4、执行sql,返回结果(execute and return)

根据sql处理过程确定,软硬解析发生再1.3步骤过程中,

硬解析过程:

1.语法、语义及权限检查;2.查询转换(通过应用各种不同的转换技巧,会生成语义上等同的新的SQL语句,如count(1)会转为count(*));3.根据统计信息生成执行计划(执行计划由很多种,但是一定选择成本最低,消耗资源最少,最优的方案执行计划);4.将游标信息(执行计划)保存到库缓存。

软解析过程:

1.语法、语义及权限检查;2.将整条SQL 直接在库缓存中执行计划

1、硬解析( hard parse ) : 当一条 SQL 语句进入共享池后,没有解析成执行计划的缓存,就需要进行硬解析—消耗资源大,成本高,速度慢

2、软解析( soft parse ) : 当一条 SQL 语句进入共享池后,共享池中有执行计划的缓存,就进行软解析—shared pool中获取缓存的sql,如果没有的情况下则会发生硬解析过程,

查看解析的相关信息,
在这里插入图片描述
1、cpu解析时间
2、执行计划解析时间
3、解析总数=硬解析总数+软解析总数,可以得到软解析总数,
4、硬解析总数
5、解析失败总数

相关文章:

  • 边界dp注意重叠边界
  • Java使用Tesseract进行OCR图片文字识别
  • 老师是怎么分班的?用什么工具比较好?
  • 实战OpenCV之绘制图形
  • JVM 在GC 时的根对象都有那些
  • day_49
  • 代码断点调试
  • LLM 直接偏好优化(DPO)的一些研究
  • springboot框架中filter过滤器的urlPatterns的匹配源码
  • Oracle(81)如何生成AWR报告?
  • 链动 2+1 模式小程序 AI 智能名片商城源码培训邀约策略研究
  • Springsecurity 自定义AuthenticationManager
  • RocketMQ Dashboard
  • 【大数据】什么是数据中台?
  • 【HarmonyOS 4.0】基础组件
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • bootstrap创建登录注册页面
  • Druid 在有赞的实践
  • js数组之filter
  • js写一个简单的选项卡
  • Object.assign方法不能实现深复制
  • React 快速上手 - 07 前端路由 react-router
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • 软件开发学习的5大技巧,你知道吗?
  • 通过几道题目学习二叉搜索树
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​Java并发新构件之Exchanger
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (function(){})()的分步解析
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (SpringBoot)第二章:Spring创建和使用
  • (第二周)效能测试
  • (二)Linux——Linux常用指令
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)基于IDEA的JAVA基础12
  • (转)Linux下编译安装log4cxx
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET项目中存在多个web.config文件时的加载顺序
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • :“Failed to access IIS metabase”解决方法
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @EventListener注解使用说明
  • @Pointcut 使用
  • [ JavaScript ] JSON方法
  • [012-1].第12节:Mysql的配置文件的使用
  • [22]. 括号生成
  • [C++] 深入理解面向对象编程特性 : 继承
  • [C++提高编程](三):STL初识
  • [flink]部署模式
  • [Google Guava] 2.1-不可变集合