library cache

library cache
一、library cache与shard pool的关系
1.library cache是shared pool内的一块空间,大小由shard pool自动分配,library cache与dictionary cache都存放在shared pool中
2.存放sys用户所拥有的对象的空间,称为dictionary cache
3.存放用户sql语句,pl/sql代码、解析树、执行计划等的空间称为library cache
4.library cache与dictionary cache空间互换
当dictionary cache需要缓存新的数据字典时,shared pool剩余空间不足,会将library cache中最不常使用的内容覆盖
二、library cache与dictionary cache关系
library cache在执行sql语句时,需要参照dictionary cache里的数据字典(包括表名了、列名、权限等)
用户sql对字典的修改(比如修改某表的列名,添加列等)也会将结果返回给dictionary cache
三、library cache的管理方式
1.library cache由多个hash bucket队列管理,每个hash bucket存放着多个handle(句柄)
2.使用hash算法
server process将sql text转化为ASCII码,对ASCII码进行hash运算,产生hash bucket号,对号入座,找到相应hash bucket队列
2.使用hash bucket管理目的
通过hash算法,实现sql语句在library cache中的快速遍历,判断该sql在library cache中是否存在,如不存在,申请shared pool空间存放sql并将该空间存放在该hash bucket中;如存在,找该sql的handle;
3.使用handle的目的
句柄的含义像书的目录,对象的含义像书中页的内容;通过句柄找对象就像通过目录查找书页,提高查找对象的速度,
通过handle找到heap0(heap0存放着执行计划)
四、library cache工作机制
1.用户执行sql语句,server process将sql text转化为ASCII码
2.ASCII做hash运算,得到hash bucket号,找到hash bucket队列
3.判断该sql语句是否存在hash bucket中
a.存在该语句(以往执行过)且找到该语句的句柄,执行软解析
b.存在该语句(以往执行过)但未找到该语句的句柄,重新加载相关对象(reload),执行软解析
c.不存在该语句(该语句第一次执行)
申请shard pool空间,存放新的sql语句,先获得shared pool latch,在shared pool中的找bucket链表中可用的chunk,之后释放latch
存放新sql的空间即library cache,执行硬解析

附:
查询用户169产生会话等待的sql text
select sql_text
from v$sqltext a
where a.hash_value=(select sql_hash_value
                                   from v$session b
                                   where b.sid=145);
此处说明了sqltext是经过hash运算的

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26188260/viewspace-713926/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26188260/viewspace-713926/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值