Skip to content

为什么MySQL 8.0要取消查询缓存

MySQL从8.0版本开始移除了查询缓存,主要是由于查询缓存在许多场景下带来的性能问题和复杂性。以下是取消查询缓存的一些主要原因:

  1. 全局锁定问题
    • 查询缓存会在多用户环境中引发全局锁定问题。当一个表被修改时,相应的查询缓存需要被刷新,这会导致查询缓存的全局锁定,从而影响数据库的并发性能。
  2. 竞争与争用
    • 在高并发环境中,由于查询缓存需要锁定来维持一致性,导致了大量竞争和锁争用。这种情况在写操作频繁和查询频繁的环境中尤为明显,因为每次写操作都可能触发缓存失效。
  3. 维护与复杂性
    • 查询缓存的维护引入了额外的复杂性。需要不断监控和刷新缓存,当表更新时需要对缓存进行适当管理,增加了数据库的维护开销。
  4. 缓存命中率低
    • 在许多实际应用中,查询缓存的命中率并不高,尤其是在动态数据系统中。因为数据变更频繁,缓存很容易失效,从而无法提供预期的性能提升。
  5. 替代方案的有效性
    • 随着内存容量的增加及更高效的缓存方案(如应用层缓存和外部缓存工具)的广泛应用,查询缓存不再是提高查询性能的最佳解决方案。
    • 许多现代应用程序使用如Redis、Memcached等专门的缓存系统来缓存查询结果,而不是依赖数据库的查询缓存。
  6. 复杂查询的支持
    • MySQL查询缓存只适用于非常简单的SELECT查询,而不支持复杂查询的缓存。这限制了它在现代应用中广泛使用。

通过取消查询缓存,MySQL 8.0简化了数据库引擎的设计,使其更关注于核心事务处理与数据一致性。同时,开发者也被鼓励采用更灵活和可扩展的外部缓存解决方案,这些方案可能更适合现代应用的需求。

取消查询缓存是朝着提高系统整体稳定性和性能的一步,特别是在高负载和分布式数据库环境中。

更新: 2024-08-08 15:52:38
原文: https://www.yuque.com/tulingzhouyu/db22bv/ydvccfupnmw8gb25