目录

  • 查询长时间不返回
    • 等MDL锁
    • 等flush
    • 等行锁
  • 查询慢

构造一张表,表有两个字段id和c,再里面插入了10万行记录

create table 't' ('id' int(11) not null,'c' int(11) default null,primary key ('id')
) engine = InnoDB;delimiter ;;
create procedure idata()
begindeclare i int;set i = 1;while( i <= 100000) doinsert into t values(i,i);set i = i+1;end while;
end;;
delimiter ;call idata();

查询长时间不返回

在表t执行:

select * from t where id = 1;

查询结果长时间不返回。

等MDL锁

大概率是表t被锁住了,接下来分析原因:一般都是首先执行show processlist命令,看看当前语句处于什么状态。

表示现在有个线程正在表t上请求或者持有MDL写锁,把select语句阻塞了:

session A通过lock table命令持有表t的MDL写锁,而sessionB 的查询需要获取MDL读锁,所以session B 进入等待状态。

处理方式:找到谁持有MDL写锁,然后把它kill掉。

通过

select blocking_pid from sys.schema_table_lock_waits;

得到blocking_pid = 4;

然后用kill命令断开即可。

等flush

在表t上执行下面语句:

select * from information_schema.processlist where id=1;

可以查看出该线程的状态是Waiting for table flush;

表示现在有一个线程正要对表t做flush操作。

flush tables t with read lock;   --只关闭表t
--or
flush tables with read lock;    --关闭MySQL里面所有打开的表

正常来说,这两个语句执行起来都很快,除非它们也被别的线程堵住了。

所以可能是:有一个flush tables命令被别的语句堵住了,然后它又堵住了我们的select语句。

下图是执行结果:

等行锁

select * from t where id = 1 lock in share mode;

由于访问id = 1这个记录时要加读锁,如果这时候已经有一个事务在这行记录上持有一个写锁,我们的select语句就会被堵住,如下:

session A启动事务,占用写锁,但是不提交,导致session B被堵住。

可以通过:

mysql> select * from t sys.innodb_lock_waits where locked_table='`test`.`t`'\G

进行查询,查出是谁占着这个写锁

发现是4号线程,然后我们kill 4

查询慢

select * from t where c = 50000 limit 1;

由于字段c上没有索引,所以这个语句只能走id主键顺序扫描,因此需要扫描5万行。

扫描行数多,所以执行慢,这个很好理解。

而下面的这条语句扫描行数为1,但是执行时间取却较长

select * from t where id = 1;


在这个场景下,session A先启动了一个事务,之后session B才开始执行update语句。

session B 更新完 100 万次,生成了 100 万个回滚日志 (undo log)

带lock in share mode 的sql是当前读,因此会直接读到 1000001 ,所以速度很快。

select * from t where id = 1语句是一致性读,因此需要从 1000001 开始,依次执行undo log,执行100万次后,才将1返回

**回滚日志过大引起的一致性读慢,当前读快 **

《MySQL——查询长时间不返回的三种原因与查询慢的原因》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 成为MySQL DBA 博客系列-数据库升级
  2. Luence初始与简单应用-Document的增删改查.
  3. JPA的泛型DAO设计及使用
  4. java getselectedrow_Java swing(2)自己设计完善的独特功能图书管理系统,获取下拉框等的文字内容等...
  5. Windows server 2008 r2企业版安装步骤
  6. win8计算机安全模式,安全模式,详细教您Win8怎么进入安全模式
  7. 登录不上_《盗贼之海》登录不上?还在傻傻等待,快来让我教教你
  8. 二逼了吧,你竟然在中断里面休眠
  9. dockerfile如何运行镜像内的脚本_第七章 Dockerfile文件解析(一)
  10. hdu 1254 推箱子(嵌套搜索,bfs中有dfs)
  11. 【学习笔记】从eXeScope到汇编与反汇编、加壳与脱壳的理解
  12. 数据结构课程设计——学生成绩查询与分析系统(简单详细版,含讲解)
  13. 编写USB鼠标驱动程序,并测试
  14. 南丁格尔玫瑰图的Python
  15. [ExtJS] Tpl模板中的extjs控件无法失焦处理
  16. 服务器hz和显示器hz,揭秘精神论:玩电竞是否必须144Hz显示器
  17. 2021年HECTF部分Writeup
  18. 客户端在线更新-QT
  19. Unity3d 实现节奏空间(Beat Saber)模型切割功能项目工程源码。
  20. 时辰和属相、当令经的对应关系

热门文章

  1. java 批量验证_正则表达式批量验证函数
  2. 教你玩转CSS Overflow
  3. UEditor 任意文件上传漏洞
  4. WebCrack:网站后台弱口令批量检测工具
  5. 西北大学计算机转专业,西北大学可以转专业吗,西北大学新生转专业政策
  6. 卸载 流程_一款适合于windows端的卸载神器 彻底清理残留软件
  7. mysql单源多表同步单库单表_MySQL主从复制单表或者多表
  8. JS之 if语句函数 对接事件动作 函数更改css css对接需要换妆的区id或class
  9. 【HTML基础】表格和表单
  10. 靠谱的div引入任何外链内容