MySQL远程时缓存如何工作?
问题:MySQL远程时缓存如何工作? 我一直在使用 PHP 5.6 进行旧电子商务应用程序的服务器迁移。 切换涉及来自 Linode 的两台 Dedicated 32 服务器。 一台服务器用于 NginX + PHP,另一台仅用于 MySQL。 遗留应用程序利用 memcached。 切换后,我可以看到由于私有入站和出站连接导致的大量内部流量。 到目前为止,这个元素没有对性能造成任何问题。 但是,
问题:MySQL远程时缓存如何工作?
我一直在使用 PHP 5.6 进行旧电子商务应用程序的服务器迁移。
切换涉及来自 Linode 的两台 Dedicated 32 服务器。
一台服务器用于 NginX + PHP,另一台仅用于 MySQL。
遗留应用程序利用 memcached。
切换后,我可以看到由于私有入站和出站连接导致的大量内部流量。
到目前为止,这个元素没有对性能造成任何问题。
但是,我的印象是查询将被缓存在本地机器上,而不是在远程机器上。
因为如果查询缓存在远程主机上,它仍然必须通过专用网络传输结果集,而不是从 RAM 或本地 SSD 中检索。
我认为这是错误的吗?
与本地缓存相比,我可能错过了私有入站流量对整体性能更有利的点。
解答
MySQL 有一个称为 Query Cache 的功能,但是它会将查询结果集缓存在 mysqld 服务器进程中,而不是在客户端上。如果在结果缓存在查询缓存中之后再次运行完全相同的查询,它将从查询缓存中复制结果并避免再次运行查询的成本。但这不会避免通过网络将结果从 mysqld 传输到您的 PHP 应用程序的时间。
另请记住,MySQL 查询缓存已被弃用并退役。
或者,您的应用程序可以将来自查询结果的数据存储在 memcached 中,但通常这将由应用程序代码完成(我知道有 UDF 可以从 MySQL 触发器读取和写入 memcached,但这是一个坏主意)。
如果你的 memcached 服务和你的 PHP 代码不在同一个主机上,它会导致网络传输_两次_:第一次从 MySQL 查询数据时,然后再次传输数据_into_memcached,然后每次获取缓存时memcached 的数据_out_。
PHP 还有一些特性可以做内存缓存,比如APCu。我对此没有任何经验,通过简要扫描文档并不清楚它存储缓存数据的位置。
PHP 被设计为一种“无共享”的语言。每个 PHP 请求都有自己的数据,并且数据通常不会持续到下一个请求。这就是为什么缓存通常不保存在 PHP 内存中的原因。应用程序依赖于 memcached 或数据库本身,因为它们保存数据的时间比单个 PHP 请求长。
如果您有足够快的网络,那么通过网络从缓存中获取项目的成本应该不会很高。我过去工作中的性能架构师开发了这种智慧:
“远程内存比本地存储快。”
他们的意思是,如果数据在服务器上的 RAM 中,那么从 RAM 中读取数据,即使有通过网络传输数据的额外开销,通常也比从本地主机上的持久(磁盘)存储中读取数据要好。
更多推荐
所有评论(0)