如何理解和调整BUFFER CACHE和DBWR

分类:编程技术 时间:2024-02-20 15:59 浏览:0 评论:0
0
如何理解和调整BUFFER CACHE和DBWR。针对这一问题,本文详细介绍了相应的分析和解答。希望能够帮助更多想要解决这个问题的朋友找到更简单、更容易的方法。

理解和调优Buffer Cache和DBWR(Doc ID 62172.1)

理解和调优BUFFER CACHE和DBWR(数据库编写器)

当我们的数据库出现等待时对于事件,这意味着数据库性能已受到影响:

--1) “缓存缓冲区 lru 链”或“缓存缓冲区链”闩锁的闩锁争用
--2) 大“平均写入队列”长度
--3) 花费大量时间等待“写入完成等待”
--4) 花费大量时间等待“空闲缓冲区等待”?或“缓冲区忙”等待”

BUFFER CACHE 缓冲区高速缓存
Oracle 在 SGA 的一个区域中保存数据库块的副本,称为缓冲区高速缓存。
缓存可以保存来自不同时间点的块的多个副本,并且可能包含“脏”块,即已更新但尚未刷新到磁盘的块。数据库write/s(DBWR或DBWn进程)负责将脏数据块写入磁盘,而任何用户会话都可以读取写入缓存的数据块。

当进程需要空闲缓冲区时,缓冲区高速缓存中的所有块都保存在 LRU(最近最少使用)列表中。它将扫描该列表的 LRU 端以查找它可以使用的非脏缓冲区。 “缓存缓冲 lru 链”锁存器对 LRU 列表进行序列化操作。 (Oracle8i中LRU列表使用的算法与早期版本不同,影响因素保持不变)。

正在评估缓冲区?缓存活动
评估缓冲区高速缓存的活跃度
缓冲区高速缓存命中率衡量内存中需要多少次块,而不是在磁盘上执行昂贵的读取操作来获取该块。

可以查询V$SYSSTAT视图来获取统计信息用于调整缓冲区高速缓存的信息。为了计算此比率,您必须考虑正在运行的 Oracle 版本。建议命中率高于 80% 后再增加缓冲区缓存大小。

如何在每个 Oracle 版本上计算此比率。
如何计算Oracle各个版本的命中率。

“缓存命中率”是来自大多数手册和文章的统计数据。
缓存命中的定义不止一种
命中率用于表示各种情况的发生频率。访问数据缓冲区的进程会在 Oracle 缓冲区中查找块。缓存。准确的命中率值与数据库活动的摘要,并能够随着时间的推移对其进行监控以记录任何重大变化。

重要:
命中率高(接近100%)并不一定就是好的。
原因稍后解释。

计算:
~~~~~~~~~~~~
电路中最常用的公式Oracle7/8 的缓冲区高速缓存命中率的关系为:

命中率 = 1 -(物理读取)
----------
                   (一致性获取 + 数据库块获取)

Oracle8i/9i 中更好的公式是:

命中率 = 

1 - ( 物理读取- (物理直接读取 + 物理直接读取 (吊球)) )
      ------------------------ -------- ------------------------------------------------------ ---
( db block gets + confirm gets - (物理读取直接 + 物理读取直接(lob)) )

使用V buffer_pool_statistics可以看到每个pool的命中率:
SELECT name, 1-( physical_reads / (consistent_gets + db_block_gets ) ) "HIT_RATIO"< br/>      FROM V$BUFFER_POOL_STATISTICS
      WHERE (consistency_gets + db_block_gets) !=0
   ;

“未命中率”< br/>~~~~~~~~~ ~~~~~~~
有时您可能会看到“未命中率”的引用。这只是

未命中率 = 100% - 命中率(以百分比表示)

关于命中率
~~~~~~~~~~~~~~~~~~~~~~~~
OLTP 类型的系统需要良好的命中率,但决策支持类型的系统
/> 系统的命中率可能要低得多。如果使用仅基于
“物理读取”的第一种计算形式,则使用并行查询将使
命中率意义不大。

接近 100% 的命中率并不意味着意味着应用程序很好。
在频繁使用的SQL语句中使用非选择性索引很有可能获得出色的命中率。
例如:考虑如下语句:

SELECT * FROMEmployee WHERE empid=1023 AND sex='MALE';

如果 EMPLOYEE 是一个大表,并且此语句始终使用 GENDER 索引
而不是 EMPID 索引,然后您扫描很多块(来自 GENDER
索引)并在缓存中找到几乎所有块,因为每个人都在扫描这个
相同的索引一遍又一遍。命中率很高,但性能
很差。 “取消选择”的常见“变体”tive”索引是一种严重倾斜的索引,其中存在大量具有特定
值的条目(例如:工作流程状态代码 CLOSED ) - 该索引可能在某些情况下表现良好查询,对于最常见的值非常差。

如果员工是一个大表,这个语句总是使用性别索引。
而不是工号索引,然后你扫描很多的片段(来自性别索引)并在缓存中找到几乎所有缓存,因为每个人都在扫描这个。
一遍又一遍相同的索引。命中率很棒,但性能很糟糕。常见的“变体” “选择性”索引的“是具有特定条目的大型索引。
值(例如,关闭的工作流状态代码)-该索引可能会很好地执行。
一些查询和最常见的值​​很差。

以下命中率公式适用于所有版本的Oracle:
一些评论:
~~~~~~~~~~~~~~~
- 一般认为“良好”的命中率达到 >80%
如果 <90%,可能仍有调整的余地 *但是*
请注意,命中率并不是性能的最佳衡量标准。

- 在
未充分利用 UNSELECTIVE 索引的应用程序中,该比率可能会人为地过高。

- 在 Oracle8.1 中,会记录“直接物理读取”

- 某些文档错误地将命中率报告为:

命中率 = 逻辑读取数 / (逻辑读取数 + 物理读取数)
< br/> 对于任何版本的 Oracle 来说,这都是不正确的。

<好的命中率一般都大于80%。如果低于90%,可能还有调整的余地,因为命中率高并不意味着性能一定好。

关于如何理解和调整BUFFER CACHE和DBWR的问题的答案就在这里分享。希望以上内容能够对大家有所帮助。如果您还有更多疑问没有解决的话,可以关注行业资讯c频道了解更多相关知识。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何理解和调整BUFFER CACHE和DBWR

用户评论