168大数据

标题: 硬解析和软解析 [打印本页]

作者: 北京小孩    时间: 2014-8-25 21:11
标题: 硬解析和软解析
shared pool 组成:
free,library cache, row cache
select * from v$sgastat t where t.name like 'lib%';
select * from v$sgastat t  where t.pool='shared pool'  and t.name='free memory';
select * from v$sgastat t where t.name ='row cache';
---------------------------------------------------------------------------------------
sql语句 先要到library cache中进行查找看sql语句是否存在如果不存在则要进行硬解析:
语法检测,权限检测, 生产执行计划 ,选择执行计划
存在则进行软解析:
语法检测,权限检测

两个的差距在选择执行计划

由于两者都要访问数据字典,所以把数据字典放到内存中
增加访问效率

select name, value from v$sysstat where name like 'parse%';
查看数据库硬解析和软解析的次数

free空间是由链组成的,不同的链的大小是不一样
当需要空间的时候根据大小到相应的链上寻找空间
如果空间有剩余则把剩下的空间放到相应的链上
如果是有大量的硬解析则会产生大量的脆片,再有大的sql上来时候
就会找不到合适的空间,则会产生ora-4031错误
链(chain)的特点:
1.把内存块串起来。
2.可以进行遍历。

library cache
也是有链组成的,但是不同于free的大小进行管理方式,
library cache是采用sql语句转换后的assic码值经过运算后
产生的数值进行管理的。
library cache的内存块中放着执行计划和SQL语句

select count(*) from x$ksmsp; 查看有多少个内存块
alter system flush shared_pool; 清空shared_pool
------------------------------------------------------------------------------------------
减少硬解析的数量,就要实现sql的共享
sql要共享必须完全相同。(空格,字母,大小写)
sql语句在内部进行转换成经过hash算法生成唯一数,如果不一样
转后assic码也不一样,经过hash算法后的数也不一样。

select sql_id, sql_text, executions from v$sql where sql_text like '%%';
查询sqlid

select SQL_FULLTEXT from v$sql where executions=1
order by sql_text; 查询没有共享的SQL








欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2