【问题标题】:Accessing Cache Slower than Accessing Database访问缓存比访问数据库慢
【发布时间】:2021-07-12 10:25:12
【问题描述】:

我正在修改 redis 和 mysql,以了解缓存如何提高性能。从缓存访问数据/应该比从数据库访问数据更快。

我在程序中计算了这两种情况所需的时间,发现 从缓存访问比从数据库访问慢得多。我想知道可能是什么原因。

需要考虑的几点:

  1. 我正在使用 Azure Redis 缓存。
  2. 主应用程序位于 VM 实例上。
  3. 我在另一个 VM 实例上托管了 MYSQL 服务器。
  4. 该表非常小,只有 200-300 条记录。
  5. 时间计算逻辑没有错误。

编辑:

缓存加载时间=约 1.2s

mysql 的加载时间= 大约 15 毫秒

原来我的应用程序和 MySQL 服务器位于同一区域,而 redis 缓存位于全球不同区域,导致延迟更高。

但我仍然希望有人解释为什么 sql 的获取时间要小得多。

【问题讨论】:

  • 这是 MySQL 效率如此之高以至于在其前面放置缓存可能无济于事的众多情况之一。对于“非常小”的表,可能没有 I/O 等。您看到每种情况的毫秒数是多少?
  • 缓存大约 1.2 秒,数据库大约 15 毫秒,我想知道为什么从 mysql 获取这么快

标签: mysql redis mysql-python mysql-connector


【解决方案1】:

如果 200-300 行的表完全缓存在 MySQL 的“buffer_pool”中,那么获取所有这些数据并将它们发送回客户端不会花费太多时间。 15ms 是合理的(虽然它取决于太多的事情要更具体)。

如果您正在获取 1 行,并且您有一个索引(尤其是 PRIMARY KEY)来定位该行,我希望它甚至比 15 毫秒更快。

我正在总结一个 40K 行的表;它需要不到 2 毫秒。但请注意:客户端和服务器在同一台机器上。 15ms 可能代表客户端和服务器相距几百英里。

一个简单的SELECT 1 需要多长时间?这将为您提供延迟的线索,如果不更改机器的物理位置,您将无法达到延迟。

【讨论】:

    猜你喜欢
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多