【问题标题】:How does cache work when MySQL is remote?MySQL远程时缓存如何工作?
【发布时间】:2020-01-28 16:43:41
【问题描述】:

我一直在使用 PHP 5.6 进行旧电子商务应用程序的服务器迁移。
切换涉及来自 Linode 的两台 Dedicated 32 服务器。
一台服务器用于 NginX + PHP,另一台仅用于 MySQL。
旧版应用程序利用了 memcached。

切换后,我可以看到由于私有入站和出站连接导致的大量内部流量。
到目前为止,这个元素没有对性能造成任何问题。

但是,我的印象是查询会缓存在本地计算机上,而不是远程计算机上。
因为如果查询缓存在远程主机上,它仍然必须通过专用网络传输结果集,而不是从 RAM 或本地 SSD 中检索。

我猜错了吗?

与本地缓存相比,我可能错过了私有入站流量对整体性能更有利的点。

【问题讨论】:

  • 缓存在数据库服务器所在的机器上。今天的通信是在千兆以太网中(在同一个服务器场上),所以速度通常不是问题。 8.0 有 mysql 的缓存策略dev.mysql.com/doc/refman/8.0/en/buffering-caching.html
  • 感谢您对gigabit ethernet的关注。

标签: mysql nginx php-5.6 mysql-5.7


【解决方案1】:

MySQL 有一个称为查询缓存的功能,但它会将查询结果集缓存在 mysqld 服务器进程中,而不是在客户端上。如果在结果缓存在查询缓存中之后再次运行完全相同的查询,它将从查询缓存中复制结果并避免再次运行查询的成本。但这不会避免通过网络将结果从 mysqld 传输到您的 PHP 应用程序的时间。

还要记住MySQL Query Cache is being deprecated and retired

或者,您的应用程序可以将查询结果中的数据存储在 memcached 中,但通常这将由应用程序代码完成(我知道有 UDF 可以从 MySQL 触发器中读取和写入 memcached,但这是个坏主意)。

如果你的 memcached 服务和你的 PHP 代码不在同一个主机上,它会导致网络传输两次:第一次从 MySQL 查询数据时,然后再次传输数据 em>into memcached,然后以后每次取memcached的缓存数据out

PHP 还有一些特性可以做内存缓存,比如APCu。我对此没有任何经验,通过简要扫描文档并不清楚它存储缓存数据的位置

PHP 被设计为一种“无共享”的语言。每个 PHP 请求都有自己的数据,并且数据通常不会持续到下一个请求。这就是为什么缓存通常不保存在 PHP 内存中的原因。应用程序依赖于 memcached 或数据库本身,因为它们保存数据的时间比单个 PHP 请求长。

如果您拥有足够快的网络,那么通过网络从缓存中获取项目的成本应该不会很高。我过去工作中的性能架构师开发了这种智慧:

“远程内存比本地存储快。”

他们的意思是,如果数据在服务器的 RAM 中,那么从 RAM 中读取数据,即使通过网络传输数据的额外开销通常也比从本地主机上的持久(磁盘)存储中读取数据要好。

【讨论】:

  • 很好的答案。在接下来的 20 天里,我可以继续关注它。谢谢。
  • @user2094178 缓存始终是一个棘手的部分,尤其是 memcached 中的远程缓存.. 问题/问题如下:1) 在数据变旧之前我可以缓存多长时间? 2)我将如何使缓存无效?
  • ... 也 @user2094178 比尔提到 memcached ,Linux 上的 MySQL innoDB 可以本机使用 memcached -> InnoDB memcached Plugin 作为某种“查询缓存”...在 Windows 上你很可能必须自己编译插件..
  • @RaymondNijland,我不会将 InnoDB memcached 插件与缓存进行比较。它是一个与 memcached API 兼容的接口,但它在 InnoDB 表中读取和写入数据。所以它有持久数据的开销。也就是说,它比使用内存缓存要慢得多。
  • true 这就是为什么我将查询缓存放在 "" 中,但是当您使用 PHP 插入由 MySQL 控制的 memcached 插件时,您会绕过 SQL 解析/优化步骤中的“开销”并存储在 memcached在 InnoDB 中,因此在这方面它比使用查询插入它要快一些。另外,MySQL memcached 插件处理缓存的验证,所以过时的数据永远不会存在,这就是为什么我称它为“查询缓存” ”。但是磁盘存储速度永远无法与内存存储速度进行比较,即使现在最快的 SDD 与 RAM 速度相比仍然被认为是“慢”
猜你喜欢
  • 2014-07-16
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 2011-04-25
  • 2016-02-15
  • 2014-10-06
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多