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、解析失败总数