【问题标题】:Oracle : Buffer Hit Ratio Vs Buffer Cache Hit RatioOracle:缓冲区命中率与缓冲区高速缓存命中率
【发布时间】:2021-06-05 12:09:47
【问题描述】:

谁能区分Oracle数据库中的Buffer Hit Ratio和Buffer Cache Hit Ratio?

缓冲区命中率:

select CASE WHEN (sum (decode (name,'db block gets', value, 0)) + (sum (decode (name,'consistent gets', value, 0)))) = 0 THEN 0 ELSE trunc ((1- (sum (decode (name,'physical reads', value, 0)) / (sum (decode (name,'db block gets', value, 0)) + (sum (decode(name,'consistent gets', value, 0)))))) * 100) END from v$sysstat

缓冲区缓存命中率:

select CASE WHEN (sum (decode (name,'db block gets from cache', value, 0)) + (sum (decode (name,'consistent gets from cache', value, 0)))) = 0 THEN 0 ELSE trunc ((1- (sum (decode (name,'physical reads from cache', value, 0)) / (sum (decode (name,'db block gets from cache', value, 0)) + (sum (decode(name,'consistent gets from cache', value, 0)))))) * 100) END from v$sysstat

【问题讨论】:

  • 谁在乎?无论哪种方式都是毫无意义的衡量标准,多年前就被揭穿了。
  • Page 7。许多驳斥这件事有用的人之一。这不是一个越高越好的指标,也不是一个越低越好的指标。
  • @JeffHolt 您可以添加一个答案并借此机会解释为什么这个指标没有用。即使我们不同意这个问题的前提,这个问题仍然可以作为向他人解释潜在问题​​的一种方式。

标签: oracle


【解决方案1】:

第一个比率衡量所有读取的缓存使用情况,第二个比率衡量所有尝试从缓存中读取的读取的缓存使用情况。

区别很重要,因为某些操作(例如并行读取)通常直接进入数据文件,甚至不会尝试从缓冲区缓存中读取。例如,如果您运行类似select /*+ parallel(16) full(t) */ count(*) from huge_table t 的查询,第一个比率会下降,但第二个比率将保持不变。在许多数据库中,尝试缓存用于并行操作的最大表是愚蠢的,因此您可能不希望将这些操作计入缓存使用量。

更多信息,这里是Database Reference Statistics Descriptions的相关部分:

一致获取 - 请求一致读取的次数 一个块。

一致获取直接 - 一致读取的次数 被请求绕过缓冲区缓存的块(例如, 直接负载操作)。这是“一致获取”的子集 统计值。

从缓存中获取一致 - 次数 从缓冲区高速缓存请求一个块的一致读取。这是一个 “一致获取”统计值的子集。

我不同意 EdStevens 的观点,即这些比率毫无意义,但大多数 Oracle 专业人士至少会同意这些比率被过度使用。

【讨论】:

  • 有时我用来获取缓冲区命中率的查询会返回负值。我在@Jon Heller 上面分享的查询有任何问题
  • @Anna 我不确定您的查询为什么返回负数 - 这两个查询似乎对我来说都很好。如果这只是一次性问题,您可能会忽略它。 Oracle 的性能统计数据、指标和样本通常是估计值,这些数字并不总是精确相加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多