• MySQL 8.0中查询缓存的废弃与原因分析


    MySQL 8.0中查询缓存(Query Cache)的废弃与原因分析

    引言

    尽管MySQL的查询缓存(Query Cache)最初设计目的是为了提升性能,但因其存在严重的可扩展性问题和易成为系统瓶颈,MySQL在8.0版本中正式移除了这一功能。自5.7版本起,MySQL已将查询缓存的默认启用状态调整为关闭,并最终在5.7.20版将其标记为过时。本文将深入探讨为何MySQL在历经多个版本迭代后,决定取消查询缓存,以及查询缓存的设计初衷。

    什么是MySQL Query Cache

    查询缓存(Query Cache)是MySQL中的一项特殊缓存机制,用于存储SELECT语句及其对应结果集,当遇到相同的查询请求时,直接从缓存中返回结果,避免重复执行查询。此功能在数据变动频率低且重复查询多的场景下尤为有效。

    MySQL缓存发挥作用的条件

    • 降低查询执行时间,但不减少网络传输消耗。
    • 资源密集型查询适合缓存,前提是更新操作相对较少。
    • 查询缓存命中率需视具体情况而定,即使较低的命中率也可能带来性能提升。
    • 缓存未命中可能由多种因素引起,包括缓存未完成预热、查询首次执行、缓存因内存不足或数据修改而失效等。

    Query Cache对性能的影响

    额外开销

    • 开启查询缓存会增加读写操作的额外消耗,包括查询前的缓存检查、查询结果的缓存写入、数据修改后的缓存清除及事务提交前的缓存延迟使用。

    碎片优化

    • 通过调整query_cache_min_res_unit参数可减少内存碎片,合理设置可平衡内存浪费和CPU消耗。
    • 使用FLUSH QUERY CACHE命令可整理碎片,集中空闲空间。

    状态监控

    • 监控Qcache_free_blocksQcache_free_memoryQcache_hits等状态变量,评估缓存的健康状况。

    Query Cache的优势与劣势

    优势

    • 在只读或读多写少的场景下,开启查询缓存能显著提升查询效率。

    劣势

    • 字节级别匹配严格,轻微变化即导致缓存无法命中。
    • 缓存过期机制过于保守,对数据修改敏感。
    • 分区表下自动禁用。
    • 增加不必要的额外负载。

    MySQL官方的抉择

    • MySQL团队认为减少性能波动比提升峰值吞吐量更为关键,因此决定移除查询缓存,转而投资于更广泛适用的优化方案。
    • 建议使用第三方工具如ProxySQL作为替代,其性能表现优于原生查询缓存。

    综上所述,MySQL 8.0中移除查询缓存的决策 ,旨在提供更加稳定、可预测的性能表现。

  • 相关阅读:
    跳表的设计与应用场景
    Android依赖注入与Hilt的使用
    OpenCV(二十九):图像腐蚀
    Netty实战(二)
    【Python爬虫与数据分析】进阶语法
    c语言基础学习笔记(二):表达式和运算符优先级
    标量、向量、矩阵、张量之间的区别和联系
    项目管理证书 PMP 的含金量高吗?
    Springboot毕设项目体育器材及场地管理系统60g3njava+VUE+Mybatis+Maven+Mysql+sprnig)
    秋招项目总结
  • 原文地址:https://blog.csdn.net/qq_38420688/article/details/139423217