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

文章目录

  • oracle整体结构图
  • [共享池(shared pool)](#共享池(shared pool))
    • [shared pool的作用](#shared pool的作用)
    • [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、解析失败总数

相关推荐
snow@li8 小时前
数据库:市场中都有哪些数据库 / 优缺点 使用情况
数据库
NoSi EFUL8 小时前
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
android·数据库·mysql
河阿里8 小时前
SQL数据库:五大范式(NF)
数据库·sql·oracle
l1t9 小时前
DeepSeek总结的PostgreSQL 19查询提示功能
数据库·postgresql
chenxu98b11 小时前
MySQL如何执行.sql 文件:详细教学指南
数据库·mysql
刘晨鑫111 小时前
MongoDB数据库应用
数据库·mongodb
梦想的颜色12 小时前
mongoTemplate + Java 增删改查基础介绍
数据结构·数据库·mysql
小小小米粒12 小时前
redis命令集合
数据库·redis·缓存
herinspace13 小时前
管家婆实用贴-如何分离和附加数据库
开发语言·前端·javascript·数据库·语音识别
步辞14 小时前
Go语言怎么用channel做信号通知_Go语言channel信号模式教程【完整】
jvm·数据库·python