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

目录

  • 查询长时间不返回
    • 等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返回
在这里插入图片描述
**回滚日志过大引起的一致性读慢,当前读快 **

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

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

相关文章

Linux 命令积累 fuser lsof mtr

fuser 用途:使用文件或文件结构识别进程,即:查询都有哪些进程占用了制定的文件、目录、设备或套接字;lsof MTR fuser命令 用途:使用文件或文件结构识别进程,即:查询都有哪些进程占用了制定的文件、目录、设备或套接字;语法:fuser [-c|-d|-f] [-k] [-u] [-x] [-V] 文件/目录…

线程终止问题

http://topic.csdn.net/u/20080429/09/9cfe5204-20b5-40fb-ac12-afdc1e4939e9.html?590511460 线程终止问题 http://blog.csdn.net/wuyazhe/article/details/1771470 带有消息机制的线程 - CustomMessageQueue(c#) using System; using System.Collections.Generic; using Sy…

HTH的完整形式是什么?

HTH&#xff1a;希望这个(那个)有帮助 (HTH: Hope This (That) Helps) HTH is an abbreviation of "Hope This (That) Helps". HTH是“希望有帮助”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking si…

排序算法复习—希尔排序

希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。 希尔排序将整个待排元素序列分割成若干个子序列&#xff08;由相隔某个“增量”的元素组成的&#xff09;分别进行直接插入排序&#xff0c;过程中较小的元素&#xff0c;跳跃式的往前…

《MySQL——幻读与next-key lock与间隙锁带来的死锁》

create table t (id int(11) not null,c int(11) default null,d int(11) default null,primary key (id),key c (c) ) engine InnoDB;insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);该表除了主键id&#xff0c;还有索引c。 问下面的语句…

css 阴影 效果_CSS阴影效果

css 阴影 效果CSS中的阴影效果 (Shadow Effects in CSS) It is always good to make our web pages stylish and beautiful, web pages that would catch users eyes instantly but one gets confused as to how to style his or her web page. The confusion is quite legit t…

java常见的ClassNotFoundException-----菜鸟学习java

java常见的ClassNotFoundException 1 - java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 添加包common-logging.jar2 - java.lang.ClassNotFoundException: javax.transaction.Synchronization 添加包jta.jar(hiberante)3 - java.lang.ClassNo…

关于easyui的一些小知识点(1)

让layout布局自动适应浏览器宽度只需要加上fit"true"属性。转载于:https://www.cnblogs.com/haifg/p/3613789.html

《MySQL——加锁规则(待补全,有些没看懂)》

catalog加锁规则等值查询间隙锁非唯一索引等值锁主键索引范围锁非唯一索引范围锁唯一索引范围锁 bug非唯一索引上存在"等值"的例子limit语句加锁关于死锁总结 1、查询过程中访问到的对象才会加锁&#xff0c;而加锁的基本单位是next-key lock&#xff08;前开后闭&am…

c# 命名空间命名规范_C#中的命名空间

c# 命名空间命名规范C&#xff03;命名空间 (C# Namespace ) In C# namespaces are used to group similar type of classes. Two classes with same name in different namespaces never conflict to each other. 在C&#xff03;中&#xff0c;名称空间用于对相似类型的类进…

PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程

这两天刚装好Windows 7&#xff0c;碰巧前段时间有朋友问我Windows下如何安装搭建PHP环境&#xff0c;所以打算勤劳下&#xff0c;手动一步步搭建PHP环境&#xff0c;暂且不使用PHP环境搭建软件了&#xff0c;在此详细图解在Windows 7下安装配置PHPApacheMysql环境的教程&#…

《MySQL—— 业务高峰期的性能问题的紧急处理的手段 》

catalog短连接风暴先处理占着连接但是不工作地线程减少连接过程的消耗慢查询性能问题索引没有设计好语句没写好选错索引QPS突增问题短连接风暴 正常的短连接&#xff1a; 执行很少sql语句就断开&#xff0c;下次需要的时候再重连。MySQL建立连接的过程成本很高&#xff0c;包含…

sql 算出下级销售总和_找出总和字符串

sql 算出下级销售总和Description: 描述&#xff1a; This is a standard interview problem to check that the given string is a sum string or not using backtracking. 这是一个标准的面试问题&#xff0c;用于检查给定的字符串是否为总和字符串或不使用回溯。 Problem…

Request 分别获取具有相同 name 属性表单元素值

html 中是允许多个具有相同name属性的元素的&#xff0c;例如 <div> <input name"txtName" id"txtFirstName" type"text" /> <input name"txtName" id"txtMiddleName" type"text" /> <input…

《MySQL——redo log 与 binlog 写入机制》

目录binlog写入机制redo log写入机制组提交机制实现大量的TPS理解WAL机制如何提升IO性能瓶颈WAL机制告诉我们&#xff1a;只要redo log与binlog保证持久化到磁盘里&#xff0c;就能确保MySQL异常重启后&#xff0c;数据可以恢复。 下面主要记录一下MySQL写入binlog和redo log的…

BBIAB的完整形式是什么?

BBIAB&#xff1a;再回来一点 (BBIAB: Be Back In A Bit) BBIAB is an abbreviation of "Be Back In A Bit". BBIAB是“ Be Back in A Bit”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites lik…

字符串:KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组

涉及到字符串的问题&#xff0c;无外乎这样一些算法和数据结构&#xff1a;自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用。当然这些都是比较高级的数据结构和算法&#xff0c;而这里面最常用和最熟悉的大概是kmp&#xff0c;即使如此还是有相当一部分人也…

WPF CanExecuteChanged

继承ICommand ,RelayCommand命令 1 public class RelayCommand : ICommand2 {3 private readonly Action _execute;4 private readonly Func<bool> _canExecute;5 public event EventHandler CanExecuteChanged;6 public RelayComma…

《MySQL——主备一致性六问六答》

目录备库为什么要设置为只读模式&#xff1f;备库设置为只读&#xff0c;如何与主库保持同步更新&#xff1f;A到B的内部流程如何&#xff1f;binlog内容是什么&#xff1f;row格式对于恢复数据有何好处M-M结构的循环复制问题以及解决方案备库为什么要设置为只读模式&#xff1…

代码管理工具

http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspx转载于:https://www.cnblogs.com/hebeiDGL/archive/2012/09/25/2700961.html