MySQL 为什么在 8.0 版本中移除了查询缓存功能?

MySQL 在 8.0 版本中移除了查询缓存功能。查询缓存是在较早版本的 MySQL 中存在的一个功能,其主要目的是缓存查询结果,以便在之后相同的查询再次被执行时,可以直接返回缓存的结果,而不必再次执行查询,从而提高性能。

然而,查询缓存在实际使用中存在一些问题,导致它逐渐被认为是不太可取的功能,因此在 MySQL 8.0 版本中被移除:

  1. 锁粒度问题:查询缓存的实现可能导致在高并发情况下频繁的锁竞争,影响整体数据库性能。

    锁粒度问题是指在数据库中,锁定数据时确定的范围或粒度。不同的锁粒度会对数据库的并发性能产生影响。在早期版本的 MySQL 中,查询缓存存在锁粒度问题,其中锁的范围较大,对于高并发环境可能导致性能下降。

    在关于锁粒度的问题中,主要涉及到两种主要的锁类型:

    共享锁(Shared Locks)和排他锁(Exclusive Locks)。

    • 共享锁(Shared Locks):允许多个用户同时读取共享数据,不允许数据被修改。多个读操作可以同时持有共享锁,不会互相阻塞。

    • 排他锁(Exclusive Locks):独占性质的锁,当一个事务持有排他锁时,其他事务无法对同一数据进行读取或修改。

    在MySQL的查询缓存中,锁的粒度问题主要体现在查询缓存的实现方式上。当查询缓存开启时,如果对一张表进行写操作(比如插入、更新、删除),整个表的查询缓存将被失效,这可能导致锁住整个表而不是仅仅影响到那些被修改的部分。

    这就意味着即使只有很小一部分数据被修改,整个表的查询缓存都会失效,而其他查询也会被阻塞等待缓存失效后的刷新。这种锁定方式会对数据库的并发性能产生负面影响,尤其是在高并发环境中,可能会造成大量的阻塞,降低数据库的响应速度。

    为了解决这个问题,MySQL在更高版本中(如MySQL 8.0)移除了查询缓存功能,这样可以减少对全表的锁定,提高并发性能。取而代之,建议使用其他方法来优化查询性能,如良好的索引设计、查询优化和缓存策略等。

  2. 内存管理开销:维护查询缓存需要消耗大量内存资源,对于大型数据库而言,这可能导致内存管理上的瓶颈。

  3. 并发性能问题:查询缓存对于高并发环境下的性能并没有显著提升,反而可能引起性能下降。

  4. 复杂的失效策略:缓存的命中率不高,且在数据变更时需要进行缓存的失效和刷新,导致复杂的策略和额外的性能开销。

    命中率为什么不高?

    MySQL查询缓存命中率不高的主要原因如下:

    • 复杂的SQL查询:复杂的 SQL 查询语句往往不容易被缓存。当 SQL 查询中包含变量、函数、子查询或时间戳等动态内容时,这些查询难以在缓存中找到完全匹配的相同查询,因此缓存命中率较低。

    • 数据更新频繁:如果数据库中的数据频繁更新(插入、更新、删除),那么查询缓存将更容易被清空或失效。一旦数据被修改,与该数据相关的缓存会被清除,导致缓存的命中率下降。

    • 查询结果集较大:大型查询结果集不太可能被完全缓存,因为缓存的空间是有限的。如果查询结果集很大,即使一部分结果被缓存了,仍可能导致整个查询结果无法完全命中缓存。

    • 缓存配置限制:MySQL查询缓存是在服务器级别进行配置的,可能会受到配置限制的影响。例如,如果查询缓存的内存分配较小,那么只有部分查询结果能够被缓存。

    • 不同的连接参数或会话参数:MySQL查询缓存对会话级别和连接级别的参数敏感。不同的连接参数或会话参数可能会导致相同查询的缓存无法命中。

    • 缓存失效策略:MySQL查询缓存使用的失效策略可能不够灵活,当数据发生变化时,相关的缓存可能无法及时更新,导致缓存命中率降低。

    因为上述原因,MySQL查询缓存的命中率并不总是理想的。这也是为什么在MySQL的最新版本中(如MySQL 8.0),MySQL决定移除查询缓存功能,因为它对性能并不总是有积极影响,而是可能成为性能瓶颈。MySQL鼓励使用其他优化手段来提高查询性能,比如合理设计索引、调整查询语句、使用缓存策略等。

基于这些问题,MySQL 社区决定在 MySQL 8.0 版本中废弃查询缓存功能。尽管查询缓存在某些情况下可以提供性能优势,但是在多数高并发和大规模应用场景下,其实际效果并不理想,甚至可能成为性能瓶颈。

MySQL 在 8.0 版本后对性能和功能进行了重大优化和改进,并推荐使用其他方式来优化查询性能,如合理设计索引、使用合适的查询优化方法和采用缓存策略等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/130863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware产品收集日志方法汇总

概述 vCenter日志是一个用于存储与vSphere环境相关的各种活动、事件和警告的日志系统。通过收集并分析vCenter日志,管理员可以获得有关其虚拟化环境的重要洞察和故障排除信息。 vCenter日志由多个组件组成,包括vCenter Server、ESXi主机和其他vSphere组…

Tomcat运行日志乱码问题/项目用tomcat启动时窗口日志乱码

文章目录 一、问题描述:二、产生原因三、解决方法 一、问题描述: 项目在idea中运行时日志是正常的,用Tomcat启动时发现一大堆看不懂的文字,如 二、产生原因 产生乱码的根本原因就是编码和解码不一致,举个例子就是翻…

SLAM从入门到精通(参数标定)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 标定是slam开发过程中很重要的一个环节。这部分内容涉及到很多方面,比如说传感器、比如说算法、比如说机械,总之好的标定不…

Ubuntu18.04系统镜像制作

安装使用systemback # 添加源 sudo add-apt-repository --remove ppa:nemh/systemback sudo add-apt-repository "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main"# 下载 sudo apt update sudo apt install systemback打开systemback,点击创建li…

【Python机器学习】零基础掌握VotingClassifier集成学习

为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…

树结构及其算法-二叉排序树

目录 树结构及其算法-二叉排序树 C代码 树结构及其算法-二叉排序树 事实上,二叉树是一种很好的排序应用模式,因为在建立二叉树的同时,数据已经经过初步的比较,并按照二叉树的建立规则来存放数据,规则如下&#xff1…

人们常常下定决心“不改变”

"因为我的性格很悲观" 有的人会觉得一些事情发生,是自己性格使然,改变不了。 但其实性格是可以改变的。 这听起来似乎不太现实,自己的性格就是这样,怎么会改变? 那换种表达,我们看待世界的方式可…

源码编译 7z

源码编译 7z 2023.11.04 ChrisZZ 1. 目的 在 macOSX 电脑上,编译 7zip 的控制台应用程序 7zz, 复刻官方给的/homebrew 提供的 7zz 程序。 2. 下载源码 https://www.7-zip.org/a/7z2301-src.tar.xz 3. 查询编译规则描述文件 7zz 是控制台程序&…

【蓝桥每日一题]-倍增(保姆级教程 篇1)

今天讲一下倍增 目录 题目:忠诚 思路: 题目:国旗计划 思路: 查询迭代类倍增: 本质是一个一个选区间使总长度达到 M,类似凑一个数。而我们会经常用不大于它最大的二的次幂,减去之后,再重复这…

element UI DatePicker 日期选择器 点击时间点可选限制范围前后十五天

<el-date-picker v-model"timeRange" type"datetimerange" align"right" :default-timedefaultTimevalue-format"yyyy-MM-dd HH:mm:dd" range-separator"至" start-placeholder"开始日期"end-placeholder"…

编码器的分类

目录 光电编码器 一、增量式编码器 二、绝对式编码器 三、混合式绝对值编码器 四、旋转变压器 五、正余弦伺服电机编码器 光电编码器 光电编码器主要有增量式编码器、绝对式编码器、混合式绝对值编码器、旋转变压器、正余弦伺服电机编码器等&#xff0c;其中增量式编码器…

PackageManagerService初始化

参考资料&#xff1a;PMS 第 1 篇 - PackageManagerService 初始化 这个是基于Android 7的&#xff0c;我看的代码是Android 9 前言 PMS 用来管理所有的 package 信息&#xff0c;包括安装、卸载、更新以及解析 AndroidManifest.xml 以组织相应的数据结构&#xff0c;这些数…

《研发效能(DevOps)工程师》课程简介(三)丨IDCF

在研发效能领域中&#xff0c;【开发与交付】的学习重点在于掌握高效的开发工具和框架&#xff0c;了解敏捷开发方法&#xff0c;掌握持续集成与持续交付技术&#xff0c;以及如何保证应用程序的安全性和合规性等方面。 由国家工业和信息化部教育与考试中心颁发的职业技术证书…

leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化 + 画递归树

关于此题我的往期文章&#xff1a;LeetCode 322.零钱兑换 完全背包 动态规划_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133386579看本期文章时&#xff0c;可以先回顾一下动态规划入门知识和完全背包理论和实战…

面试算法50:向下的路径节点值之和

题目 给定一棵二叉树和一个值sum&#xff0c;求二叉树中节点值之和等于sum的路径的数目。路径的定义为二叉树中顺着指向子节点的指针向下移动所经过的节点&#xff0c;但不一定从根节点开始&#xff0c;也不一定到叶节点结束。例如&#xff0c;在如图8.5所示中的二叉树中有两条…

Nodejs和npm的使用方法和教程

Nodejs简介 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具&#xff01; &#xff08; 运行环境&#xff0c;是不是很熟悉&#xff0c;对。就是 java JRE&#xff0c;Java 运行时环境&#xff09; Node.js 在浏览器之外运行 V8 Java…

WSL 下载

可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符&#xff0c;方法是右键单击并选择“以管理员身份运行”&#xff0c;输入 wsl --install 命令&#xff0c;然后重启计算机。 首先查看可以下载的版本 最后再运行wsl --ins…

企业电脑屏幕监控有哪些?如何实现电脑屏幕监控

企业电脑屏幕监控有哪些&#xff1f;如何实现电脑屏幕监控 下载使用安企神电脑屏幕监控软件 企业电脑屏幕监控是一种监测和记录员工在工作时间内在他们的计算机上执行的活动的技术。这种监控可以有多种目的&#xff0c;包括确保员工的生产力、确保数据安全性&#xff0c;或满…

【总】HEC-RAS学习记录

【总】HEC-RAS学习记录 目标HEC-RAS简介和下载渠道简介下载渠道指导教程 目标 为了进行溃坝模拟&#xff0c;了解了很多软件&#xff0c;最终决定使用HEC-RAS HEC-RAS简介和下载渠道 简介 HEC-RAS 是美国陆军工程兵团工程水文中心&#xff08;HEC&#xff09;开发的河道水力…

【Qt-22】Qt乱码问题解决

最近在Qt项目中遇到TCP通信接收数据乱码的问题&#xff0c;很是苦恼&#xff0c;经过多次尝试&#xff0c;终于得以解决。 感谢Qt TcpSocket 传递数据乱码显示_qt中socket接受到的客户端数据显示不出来-CSDN博客 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_XX風的博客…