DBA必学:Oracle库缓存
2008-01-16 12:41:06 来源:WEB开发网要知道返回的这些结果代表了什么信息,首先看某特定名字空间的执行次数(即PINS列),然后再看尝试执行不在库缓存里的代码的次数(即RELOADS)。还有一项重要的统计指标就是某特定名字空间发生INVALIDATIONS的次数。INVALIDATIONS是指那些由于某种原因(特别是通过DDL操作)变成无效而请求解析的代码。所有这些指标都统一归纳为命中率(PINHITRATIO)。所以,在上面的例子中,可以看出该库缓存似乎运行得很好,应用程序也能够非常有效的重新使用代码。
您还可以通过以下的SQL语句获得库缓存的整体性能状况。从结果我们还是可以看到该库缓存运行的相当不错:
以下是引用片段:
select sum(pins) pins,
sum(pinhits) pinhits,
sum(reloads) reloads,
sum(invalidations) invalidations,
100-(sum(pinhits)/sum(pins)) *100 reparsing
from v$librarycache;
返回结果:
PINS PINHITS RELOADS INVALIDATIONS REPARSING
---------- ---------- ---------- ------------- ----------
12703182 12651415 4479 1731 .407512071
当某个应用程序需要调用代码时,也许您会认为只要简单地把代码放到库缓存里就行了,不过说是起来简单,但实际做到这一点却又是另一码事了。在程序使用代码的时候,必须遵守一些内部的锁定机制。这些都是为了确保所执行的查询和代码确实有效,并涉及有效的对象。简而言之,这些锁以及后续的等待事件包括以下几个方面:
库缓存加载锁(library cache load lock)
库缓存加载锁,照字面的意思就是为某个数据库对象加上锁以便使该对象能顺利加载到库缓存里。此类锁都是以EXCLUSIVE模式获得,这样其他人就不能在同一时间加载相同的对象。如果在您的会话试图获取该锁的时候,而锁已经被其他人获取了,那么您就要等到他们把对象加载到库缓存的过程进行完毕为止。
更多精彩
赞助商链接