CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

DBA必学:Oracle库缓存

作者: cyw,  出处:IT专家网, 责任编辑: 李书琴, 
2008-01-15 10:50
  如果想要成为更出色的数据库管理员并为终端客户群提供更好的服务,那么了解Oracle数据库内部的结构非常重要。Oracle数据库的库缓存就是数据库管理员需要深入了解的一个内部结构,通过深入学习,能够帮助您消除由应用软件用户引发的一些非常烦人的拒绝服务请求事件。

  【IT专家网独家】如果想要成为更出色的数据库管理员并为终端客户群提供更好的服务,那么了解Oracle数据库内部的结构非常重要。Oracle数据库的库缓存就是数据库管理员需要深入了解的一个内部结构,通过深入学习,能够帮助您消除由应用软件用户引发的一些非常烦人的拒绝服务请求事件。

  Oracle的库缓存不过是内存的一个区域,是共享池里的三个组分之一。库缓存由共享SQL工作区、PL/SQL包和过程、不同的锁和句柄组成。每当有应用程序要执行SQL或PL/SQL语句(统称代码)时,这些代码必须先暂存在Oracle的库缓存中。当应用程序运行和参考代码时,Oracle会先搜索库缓存看该代码是否已经存在内存中。如果代码已经写入内存里,Oracle就可以重新使用该已存代码(也称为软解析)。如果内存里找不到该代码,Oracle就必须将代码载入到内存中(也称为硬解析或库缓存不命中)。用来检查正在请求的代码是否确实和库缓存中已有的代码相匹配的标准很多,不过这些内容超出了本文的涵盖范围,有兴趣的读者可以自行查阅相关信息。只是要记住一点,系统给一个已配置的库缓存工作区分配了一定的内存量,也就是说在该区只能容纳与相同大小的代码量,当内存耗尽时,会自动从内存中删除掉一些不常用的旧代码,以便腾出一定空间来装载应用程序所需要的代码。这并不一定是件坏事,但我们必须要了解自己的库缓存容量大小,以及出现了多少次缓存不命中事件。如果硬解析出现的次数太多,我们可能需要增加分配给库缓存的内存容量。

  为了检测和获悉自您最近一次启动Oracle数据库之后库缓存目前的性能情况,您可以使用下面的SQL语句进行查询。如果你正好遇上了性能问题,你应该会想看看该查询返回的相关结果信息。不管怎样,返回结果的每一行都代表了在库缓存中存放着的某种特定类型的代码(名字空间),以及这些代码的执行状况。

  查询代码:

以下是引用片段:
SQL> select namespace,
            pins,
            pinhits,
            reloads,
            invalidations,
            pinhitratio * 100                     pinhitratio
       from v$librarycache;

  返回结果:

以下是引用片段:
NAMESPACE             PINS    PINHITS    RELOADS  INVALIDATIONS  PINHITRATIO
---------------              ----------    ----------     ----------     -------------        -----------
SQL AREA             9510054    9475115       1920          1731         99.6326099
TABLE/PROCEDURE    2173571    2158422       2525             0         99.3030363
BODY                  977001     976796         16             0         99.9790174
TRIGGER                28566      28491         11             0         99.7374501
INDEX                   9735       8359          5             0          85.865434
CLUSTER                 2294       2281          2             0         99.4333043
OBJECT                     0          0          0             0                100
PIPE                        0          0          0             0                100
JAVA SOURCE               0          0          0             0                100
JAVA RESOURCE            0          0          0             0                100
JAVA DATA               493        489          0             0           99.188641

  要知道返回的这些结果代表了什么信息,首先看某特定名字空间的执行次数(即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

共3页。 1 2 3 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i