【发布时间】:2018-11-04 12:22:26
【问题描述】:
对我们来说,为查询大型数据库的网站 php 脚本获得高响应时间非常重要。它本质上是获取访问该页面的用户的用户信息。数据库中可能有数百万用户。
如果记录还没有在 MySQL 数据库的 InnoDB 缓冲池中,我们不想使用用户数据,并且只有在上述缓存中存在时才使用信息。
有没有办法直接询问Mysql/InnoDB记录是否在缓存中?
【问题讨论】:
标签: mysql caching buffer innodb
对我们来说,为查询大型数据库的网站 php 脚本获得高响应时间非常重要。它本质上是获取访问该页面的用户的用户信息。数据库中可能有数百万用户。
如果记录还没有在 MySQL 数据库的 InnoDB 缓冲池中,我们不想使用用户数据,并且只有在上述缓存中存在时才使用信息。
有没有办法直接询问Mysql/InnoDB记录是否在缓存中?
【问题讨论】:
标签: mysql caching buffer innodb
Heisenberg 说它效率低下。 (好吧,也许这是一个不好的解释。)
您没有同时拥有数百万用户,以太网电缆会熔化。
你想做什么?说“您的数据不在缓存中,因此您无法访问您的帐户”?我怀疑。
一百万用户的基本行可能需要 0.1GB。你的机器有多小?
好的,我会认真的。
不,没有办法询问缓冲区池中是否缓存了一行。
我认为没有必要问。想想“缓存”(在 LRU 机制中)意味着什么。在他的记录被缓存之前返回的用户会在内存中找到它;其他用户会产生几 毫秒 的额外延迟来获取他们的数据。这假设您没有空间一直缓存整个 0.1GB(一旦 buffer_pool 预热)。
作为一个类比,想想新闻文章。每个人都想要“今日新闻”,所以那几行保留在缓存中。偶尔请求上个月的新闻需要更长的时间。
更大的图景...假设您的整个数据集对于缓冲池来说太大了。然后优化是尽量减少磁盘命中。相反,如果您的表扫描效率低下(由于缺乏适当的索引),那么事情就会“太快”地从缓存中撞出。
如果您想进一步讨论 php 网页性能,请给我们一些数据集大小、RAM 大小、查询类型等方面的线索。
【讨论】: