暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

v $ bh @ Oraclevs innodb-缓冲区-页面 @ mysql

askTom 2018-09-06
494

问题描述

来自https://docs.oracle.com/cd/E17952_01/mysql-5.6-en/innodb-information-schema-buffer-pool-tables.html
警告
查询INNODB_BUFFER_PAGE或INNODB_BUFFER_PAGE_LRU表可能会影响性能。

从源代码中,我可以发现一些互斥体获取/释放可能是性能瓶颈。

在oracle文档上,没有关于产品系统上的查询v $ bh的警告。
似乎没有性能影响。
我认为对v $ bh的查询还需要访问sga中buffer_cache的整个缓冲区,
缓冲器由锁存器保护。

为什么oracle和mysql之间有区别?

非常感谢 :)

专家解答

数据库中几乎每个v $ 视图都是基础内存结构上的立面,而不是物理表。因此,对于 (大多数) 这些视图,当您查询它们时,我们需要保护该结构,以避免在查询运行时追逐更改的内存指针-您可以进入各种内存区域。

所以是的,我们用闩锁保护那些结构,例如,我运行了这个:

select name, gets, misses
from v$latch;

declare
  x int;
begin
  for i in 1 .. 100 loop 
    select max(objd) into x from v$bh;
  end loop;
end;
/

select name, gets, misses
from v$latch;
复制


并比较了前后的数字。就我而言,我接管了300万个 “缓存缓冲区链” 锁存器。这也是我们设计了一些特别用于监视性能的v $ 结构的原因,因此可以更积极地进行查询,例如v $ sqlstats,v $ active_session_history

因此,对于所有v $ 视图,查询应该以 “明智” 的方式进行,其中 “敏感” 取决于所讨论的对象。例如,v $ session通常是一个较小的,相对固定大小的对象,因此,与查询v $ sql或v $ bh之类的东西相比,频繁查询它的问题要少得多,尤其是在这些近tb大小的数据库内存区域的现代时代。




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论