gpt4 book ai didi

mysql - MySQL 远程时缓存如何工作?

转载 作者:行者123 更新时间:2023-11-29 05:47:45 24 4
gpt4 key购买 nike

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

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

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

我的假设是错误的吗?

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

最佳答案

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

另请记住 MySQL Query Cache is being deprecated and retired .

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

如果您的 memcached 服务与您的 PHP 代码不在同一主机上,将导致网络传输两次:第一次从 MySQL 查询数据时,一次,然后再次传输数据 em>进入 memcached,之后每次您从 memcached 获取缓存数据时。

PHP 也有一些功能可以做内存缓存,比如APCu .我在这方面没有任何经验,而且从文档的简短扫描中也不清楚它存储缓存数据的位置。

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

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

"Remote memory is faster than local storage."

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

关于mysql - MySQL 远程时缓存如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58150081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com