深入MySQL——10

查询为何如此之慢

分为两种情况一种是查询后长时间不返回的,还有一种是查询很慢的

我们先来说第一种情况

长时间不返回

这种情况下就是锁阻塞导致不能返回,可以通过show processlist来查看语句处于什么状态,一般情况下会出现这几种状态:

1. waiting for table metadata

2. waiting for table flush

3. 上述两种表锁结束后进入行锁导致的

我们先来说说第一种

waiting for table metadata

也就是等MDL锁,所谓的MDL锁也叫做数据锁,保证多用户操作时的数据完整性。

比如A线程持有MDL写锁 B线程的select语句需要得到MDL读锁才能运行,所以B进入到了waiting状态。

这种情况下的解决方法就是找到这个持有写锁的线程将其kill掉。

可通过select blocking_pid from sys.schema_table_lock_waits;来解决其中blocking_pid通常指持有MDL写锁的id。

waiting for table flush

也就是等flush

我们来举例子实现这个过程

线程A一直对表进行添加或者修改操作

线程B想要flush该表

线程C select * from t where id =1;

因为flush操作需要关闭表,清除掉他的缓存区域,A线程直接在操作表阻塞了flush命令,导致C线程不能实现,这就是waiting for table flush。

解决这种情况的做法就是找到占用表的线程,将其kill掉就好。使用show processlist命令查看即可。

上述两种表锁结束后进入行锁导致的

也就是等行锁

访问id=1的时候需要一个读锁,但是如果id=1现在存在一个写锁,select语句就会被阻塞住。

这个时候通过sys.innodb_lock.wits表查到是哪个线程,直接kill掉即可。

kill掉这个连接之后,它会自动回滚事务,释放出写锁。

查询很慢的情况

我们首先得记住“坏查询不一定是慢查询”有可能是基数不够大,所以看不出来他是慢查询而已。

我们看看下面这种情况:

线程A进行查询

线程B进行update操作(update t set c=c+1 where id =1)

执行select *from t where id=1;

他会返回c=1这个结果,但是使用了800ms,只扫了一行的数据这是为什么??

如果我们执行select * from t where id=1 lock in share mode;

会很快的返回出c=10001

这是因为select *from t where id=1;是一致性读,所谓一致性读是指在这个情况下,事务得到一直的数据快照,即使其他事务对其进行修改,系统还是会根据事务开放的时间和版本数据进行返回。

而select * from t where id=1 lock in share mode;是当前读,直接返回当前c的数据。

一致性读返回的慢是因为,他对线程B的事务进行了回滚,回滚了一万次,直到得到最初的c=1才返回。

我们顺便来说说RR隔离和RC隔离

RR隔离是repeatable read 通过行锁和多版本并发控制(MVCC)来保证事务结束前所读取的数据不会被修改。防止脏读和不可重复读。

RC隔离是Read committed 是隔离级别最低的,保证读取已经提交的数据,读取数据时不加锁,可能会导致脏读。RC为解决这种情况,通常使用加行锁来解决。

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

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

相关文章

Vue3:vue-cli项目创建及vue.config.js配置

一、node.js检测或安装: node -v node.js官方 二、vue-cli安装: npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错,可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…

从传统部署到无服务器计算:AI应用在AWS平台上的革新与飞跃

文章目录 《快速构建AI应用–AWS无服务器AI应用实战》内容简介作者简介目录 随着人工智能技术的不断发展,越来越多的企业开始将人工智能应用于各个业务场景,以提高效率、降低成本并创造新的商业模式。然而,传统的人工智能解决方案往往需要大量…

从零开始C++精讲:第一篇——C++入门

文章目录 前言一、C关键字二、命名空间2.1引子2.2命名空间定义2.3命名空间的使用 三、C输入和输出3.1输出3.2输入 四、缺省参数4.1全缺省4.2半缺省 五、函数重载5.1重载概念 六、引用6.1定义6.2引用的使用示例6.2.1引用作参数6.2.1引用作返回值 6.3传值、传引用效率比较6.4常引…

超维空间M1无人机使用说明书——01、ROS机载电脑使用说明——远程连接

引言:远程连接通常采用两种方式,一种是通过可视化软件,如VNC、Nomachine等,另外一种是使用SSH。各有优缺点,两种远程登录方式的优缺点做一个简单的对比: 1、SSH优缺点 优点:1、消耗网络资源 2、运行稳定 …

前端面试题集合六(高频)

1、vue实现双向数据绑定原理是什么&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…

java SSM问卷调查系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM问卷调查管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

每天刷两道题——第十一天

1.1滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 。 输入&#xff1a;nums [1,3,-1,-3,5,3,6,7], k 3 输出&…

面试宝典之微服务框架面试题

S1、集群与分布式有啥区别&#xff1f; &#xff08;1&#xff09;相同点&#xff1a; 分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。 &#xff08;2&#xff09;不同点&#xff1a; 分布式是指将业务系统进行拆分&#xff0c;即分布式的每一个…

Java微服务架构实践指南

Java 微服务架构是一种在软件开发中越来越受欢迎的架构风格&#xff0c;它将复杂的单体应用程序拆分成一组小型、独立的服务。每个服务都可以独立开发、部署和扩展&#xff0c;并通过轻量级通信机制相互协作。以下是 Java 微服务架构的实践指南&#xff1a; 拆分服务&#xff…

SpringBoot 注解超全详解(整合超详细版本)

使用注解的优势&#xff1a; 采用纯java代码&#xff0c;不在需要配置繁杂的xml文件 在配置中也可享受面向对象带来的好处 类型安全对重构可以提供良好的支持 减少复杂配置文件的同时亦能享受到springIoC容器提供的功能 1注解详解&#xff08;配备了完善的释义&#xff09…

力扣433. 最小基因变化

广度优先搜索 思路&#xff1a; 经过分析可知&#xff0c;基因 A 突变到基因 B&#xff0c;需要满足以下条件&#xff1a; 序列 A 与序列 B 只有一个字符不同&#xff1b;变化字符在集合中&#xff1b;突变后的基因 B 一定在 bank 中&#xff1b;尝试搜索所有合法突变的基因集…

Pycharm中如何配置python环境(conda)

首先在pycharm中点击 "File" > "Settings" 再次点击如下操作&#xff1a; 点击Python Interpreter的最右侧按钮&#xff0c;点击Show All... 找到python文件 最后点击OK

若依项目的table列表中对每一个字段增加排序按钮(单体版和前后端分离版)

一、目标&#xff1a;每一个字段都添加上下箭头用来排序 只需要更改前端代码&#xff0c;不需要更改后端代码&#xff0c;后面会讲解原理 二、单体版实现方式&#xff1a; 1.在options中添加sortable:true 2.在需要排序的字段中添加sortable:true 三、前后端分离版 1.el-tab…

Open CASCADE学习|非线性方程组

非线性方程组是一组包含非线性数学表达式的方程&#xff0c;即方程中含有未知数的非线性项。解这类方程组通常比解线性方程组更为复杂和困难。 非线性方程组在很多领域都有应用&#xff0c;例如物理学、工程学、经济学等。解决非线性方程组的方法有很多种&#xff0c;包括数值…

Unity中打印信息的两种方式

不继承MonoBehaviour的普通C#类中打印信息&#xff1a; 使用Debug类的方法&#xff1a; Unity提供了Debug类&#xff0c;其中包含了一些用于打印信息的静态方法。以下是常用的几种方法&#xff1a; Debug.Log(message)&#xff1a;打印普通信息。Debug.LogWarning(message)&a…

面试题-DAG 有向无环图

有向无环图用于解决前后依赖问题&#xff0c;在Apollo中用于各个组件的依赖管理。 在算法面试中&#xff0c;有很多相关题目 比如排课问题&#xff0c;有先修课比如启动问题&#xff0c;需要先启动1&#xff0c;才能启动2 概念 顶点&#xff1a; 图中的一个点&#xff0c;比…

09、Kafka ------ 通过修改保存时间来删除消息(retention.ms 配置)

目录 通过修改保存时间来删除消息★ 删除指定主题的消息演示1、修改kafka检查过期消息的时间间隔2、修改主题下消息的过期时间3、查看修改是否生效4、先查看下主题下有没有消息5、添加几条消息看效果6、查看消息是否被删除 ★ 恢复主题的retention.ms配置1、先查看没修改前的te…

【开源】基于JAVA语言的教学过程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2.3.1 教师功能如下2.3.2 学生功能如下 三、系统展示 四、核心代码4.1 查询签到4.2 签到4.3 查询任务4.4 查询课程4.5 生成课程成绩 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVu…

了解一下InternLM2

大模型的出现和发展得益于增长的数据量、计算能力的提升以及算法优化等因素。这些模型在各种任务中展现出惊人的性能&#xff0c;比如自然语言处理、计算机视觉、语音识别等。这种模型通常采用深度神经网络结构&#xff0c;如 Transformer、BERT、GPT&#xff08; Generative P…

云平台架构知识点总结

云平台架构 内部特供 版权所有 翻版必究 项目1 云计算的认知与体验 1.1 云计算定义 ​ 维基百科定义:云计算将IT相关的能力以服务的方式提供给用户&#xff0c;允许用户在不了解提供服务的技术﹑没有相关知识以及设备操作能力的情况下&#xff0c;通过Internet 获取需要的…