【问题标题】:Querying MySQL InnoDB to find if the Record is in its Buffer Pool查询 MySQL InnoDB 以查找 Record 是否在其缓冲池中
【发布时间】:2018-11-04 12:22:26
【问题描述】:

对我们来说,为查询大型数据库的网站 php 脚本获得高响应时间非常重要。它本质上是获取访问该页面的用户的用户信息。数据库中可能有数百万用户。

如果记录还没有在 MySQL 数据库的 InnoDB 缓冲池中,我们不想使用用户数据,并且只有在上述缓存中存在时才使用信息。

有没有办法直接询问Mysql/InnoDB记录是否在缓存中?

【问题讨论】:

    标签: mysql caching buffer innodb


    【解决方案1】:

    Heisenberg 说它效率低下。 (好吧,也许这是一个不好的解释。)

    您没有同时拥有数百万用户,以太网电缆会熔化。

    你想做什么?说“您的数据不在缓存中,因此您无法访问您的帐户”?我怀疑。

    一百万用户的基本行可能需要 0.1GB。你的机器有多小?

    好的,我会认真的。

    不,没有办法询问缓冲区池中是否缓存了一行。

    我认为没有必要问。想想“缓存”(在 LRU 机制中)意味着什么。在他的记录被缓存之前返回的用户会在内存中找到它;其他用户会产生几 毫秒 的额外延迟来获取他们的数据。这假设您没有空间一直缓存整个 0.1GB(一旦 buffer_pool 预热)。

    作为一个类比,想想新闻文章。每个人都想要“今日新闻”,所以那几行保留在缓存中。偶尔请求上个月的新闻需要更长的时间。

    更大的图景...假设您的整个数据集对于缓冲池来说太大了。然后优化是尽量减少磁盘命中。相反,如果您的表扫描效率低下(由于缺乏适当的索引),那么事情就会“太快”地从缓存中撞出。

    如果您想进一步讨论 php 网页性能,请给我们一些数据集大小、RAM 大小、查询类型等方面的线索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多