1、数据库缓存命中率和库缓存命中率区别一、Database Buffer cache 和 Library Cache 概念1、 Database Buffer cache:Database Buffer Cache 是 SGA 的一部分,Oracle 利用 Buffer Cache 来管理 data block,Buffer Cache 的最终目的就是尽可能的减少磁盘 I/O。Buffer Cache 中主要有 3 大结构用来管理 Buffer Cache:(1)Hash Bucket 和 Hash Chain List :Hash Bucket 与 Hash Chain List 用来实现dat
2、a block 的快速定位。(2)LRU List :挂载有指向具体的 free buffer, pinned buffer 以及还没有被移动到 write list 的 dirty buffer 等信息。所谓的 free buffer 就是指没有包含任何数据的 buffer,所谓的 pinned buffer,就是指当前正在被访问的 buffer。(3)Write(Dirty)List :挂载有指向具体的 dirty block 的信息。所谓的 dirty block,就是指在 buffer cache 中被修改过但是还没有被写入到磁盘的 block。2、 Library Cache:Lib
3、rary cache 是 Shared pool 的一部分,主要存放 shared curosr(SQL)和 PLSQL对象(function,procedure, trigger)的信息,以及这些对象所依赖的table, index, view 等对象的信息。Library cache 需要解决三个问题:(1)快速定位的问题:Library cache 中对象众多,Oracle 如何管理这些对象,以便服务进程可以迅速找到他们需要的信息。比如某个服务进程需要迅速定位某个 SQL 是否存在于 Library cache 中。(2)关系依赖的问题:Library cache 中的对象存在复杂的依赖
4、关系,当某个 object失效时,可以迅速将依赖其的对象也置为失效状态。比如某个表发生了结构变化,依赖其的 SQL 语句需要重新解析。(3)并发控制的问题:Library cache 中必须有一个并发控制的机构,比如锁机制,来管理大量共享对象的并发访问和修改的问题,比如某个 SQL 在重新编译的同时,其所依赖的对象不能被修改。二、数据库缓存命中率和库缓存命中率Buffer Nowait %: 100.00 Redo NoWait %: 100.00Buffer Hit %: 98.72 In-memory Sort %: 99.86Library Hit %: 99.97 Soft Parse
5、 %: 99.92Execute to Parse %: 89.09 Latch Hit %: 99.99Parse CPU to Parse Elapsd %: 7.99 % Non-Parse CPU: 99.951、Buffer Hit %:数据库缓存命中率buffer hit 表示进程从内存中找到数据块的比率,监视这个值是否发生重大变化比这个值本身更重要。对于一般的 OLTP 系统,如果此值低于 80%,应该给数据库分配更多的内存。2、Library Hit %:库缓存命中率library hit 表示 Oracle 从 Library Cache 中检索到一个解析过的 SQL 或 PL/SQL 语句的比率,当应用程序调用 SQL 或存储过程时,Oracle 检查 Library Cache 确定是否存在解析过的版本,如果存在,Oracle 立即执行语句;如果不存在,Oracle 解析此语句,并在Library Cache 中为它分配共享 SQL 区。低的 library hit ratio 会导致过多的解析,增加CPU 消耗,降低性能。如果 library hit ratio 低于 90%,可能需要调大 shared pool 区。