MySQL 远程时缓存如何工作?

How does cache work when MySQL is remote?

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

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

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

我是不是猜错了?

可能是我忽略了与本地缓存相比,私有入站流量对整体性能更有好处的观点。

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

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

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

如果您的 memcached 服务与您的 PHP 代码不在同一主机上,它将导致网络传输 两次 :从 [= 查询数据时一次38=]第一次,然后再次将数据转入memcached,以后每次取memcached的缓存数据out

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

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

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

"Remote memory is faster than local storage."

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