您的位置:首页 > 其它

脚本之查询库缓存上的PIN命中率

2014-11-21 09:46 106 查看
v$librarycache
这个视图包含了关于librarycache的性能统计信息,对于共享池的性能调优很有帮助。它是按照命名空间分组统计的,结构如下:

字段

数据类型

说明

NAMESPACE

VARCHAR2(15)

librarycache的命名空间

GETS

NUMBER

请求GET该命名空间中对象的次数。

GETHITS

NUMBER

请求GET并在内存中找到了对象句柄的次数(锁定命中,latch命中)。

GETHITRATIO

NUMBER

请求GET的命中率。

PINS

NUMBER

请求pin住该命名中对象的次数。

PINHITS

NUMBER

库对象的所有元数据在内存中被找到的次数(pin命中)。

PINHITRATIO

NUMBER

Pin命中率。

RELOADS

NUMBER

Pin请求需要从磁盘中载入对象的次数。

INVALIDATIONS

NUMBER

命名空间中的非法对象(由于依赖的对象被修改所导致)数。

DLM_LOCK_REQUESTS

NUMBER

GET请求导致的实例锁的数量。

DLM_PIN_REQUESTS

NUMBER

PIN请求导致的实例锁的数量.

DLM_PIN_RELEASES

NUMBER

请求释放PIN锁的次数。

DLM_INVALIDATION_REQUESTS

NUMBER

GET请求非法实例锁的次数。

DLM_INVALIDATIONS

NUMBER

从其他实例那的得到的非法pin数。

注释:

gets字段是针对找句柄(librarycacheobjecthandle),而pins字段是针对找librarycacheobject。

librarycacheobjecthandle和librarycacheobject两个部分组成了一个完整的库对象。

其中,librarycacheobject这个部分可以被刷出到磁盘上,需要时再重载(
reload
)到库缓存中。


只有状态为recreatable的chunk才是可以被刷出的对象(位于sharedpool的LRU链表上)。

其中PIN的命中率(或未命中率)是我们系统调优的一个重要依据:

SQL>selectsum(pins)"hits",

2sum(reloads)"misses",

3sum(pins)/(sum(pins)+sum(reloads))"HitsRatio"

4fromv$librarycache;


hitsmissesHitsRatio

------------------------------

849628032880.99999661


SQL>

SQL>selectsum(pins)"hits",

2sum(reloads)"misses",

3((sum(reloads)/sum(pins))*100)"Reload%"

4fromv$librarycache;


hitsmissesReload%

------------------------------

849638082880.00033896


SQL>

当命中率小于99%或未命中率大于1%时,说明系统中硬解析过多(重载(
reload
不是意味着将[b]library
cacheobject这个部分
从磁盘读取到库缓存中?而是通过重新解析SQL语句来重建(recreate)[b]library
cacheobject这个部分
[/b]?[/b]),要做系统优化(增加SharedPool、使用绑定变量、修改cursor_sharing等措施,性能优化不是本文重点,不再赘述)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: