mysql_阻塞和死锁
什么是阻塞
由于不同锁之间的兼容关系,造成一个事务需要等待另一个事务释放其所占用的资源的现象 称为 阻塞
如何发现阻塞
mysql_8.0
SELECT waiting_pid as '被阻塞的线程',
       waiting_query as '被阻塞的SQL',
       blocking_pid as '阻塞线程',
       blocking_query as '阻塞SQL',
       waiting_age as '阻塞时间',
       sql_kill_blocking_query as '建议操作'
FROM
		sys.innodb_lock_waits
WHERE
		( UNIX_TIMESTAMP() - UNIX_TIMESTAMPP(wait_started) ) > 30;
这里的 30 是三十秒的意思
如何处理阻塞
- 终止占用资源的事务(治标不治本)
 - 优化占用资源事务的SQL,使其尽快释放资源
 
什么是死锁
并行执行的多个事务相互之间占有了对方所需要的资源
比如:
事务一
BEGIN;
Update course set score = 9.7 where course_id = 35;
update user set score = score - 10 where user_id = 10;
事务二
BEGIN;
update user set score = score + 10 where user_id = 10;
Update course set score = 9.8 where course_id = 35;
由于事务一和事务二 where条件一致,在一定的条件下会导致死锁,比如事务一在执行第一条sql时对该资源加排他锁,同时事务二对另一资源加上了排他锁,当两个事务在执行它们的第二条SQL时,会分别等待对方的排他锁释放,导致死锁发生
如何发现死锁
将死锁记录到错误日志中
set global innodb_print_all_deadlocks = on;
死锁日志例子(整理后):
TRANSACTION 1704, ACTIVE 119 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1
MYSQL thread id 12, OS thread handle 14025222817xxxxx, query id 170 localhost root update
update imc_user set score = score + 10 where user_id = 10
这里记录的可能不是导致产生死锁的那个SQL, 而是事务中发生死锁时正在执行的那个SQL,所以还是根据这个线索去程序中寻找问题的症结所在
如何处理事务的死锁
1. mysql 在发生死锁时会自行回滚占用资源少的事务(但这样就影响到了业务,治标不治本)
2. 将发现的造成死锁的事务代码按相同的顺序去占用资源,资源可以将死锁降为阻塞
mysql_阻塞和死锁的更多相关文章
- 专门查看阻塞和死锁情况以及引起的SQL语句,你可以创建后,直接运行之。
		
CREATE procedure sp_who_lock as begin declare @spid int declare @blk int declare @count int declare ...
 - 第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁
		
原文:第十六章--处理锁.阻塞和死锁(3)--使用SQLServer Profiler侦测死锁 前言: 作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用.此时,你需要尽快侦测 ...
 - sqlserver 数据库阻塞和死锁
		
参考原文:http://blog.csdn.net/ha196200/article/details/44985597 (1) 数据库阻塞: 假设第一个连接T1占有且没有释放资源,第二个连接T2请求同 ...
 - SQL Server数据库阻塞,死锁查询
		
sql 查询卡顿数据库 SELECT SPID=p.spid, DBName = convert(CHAR(20),d.name), ProgramName = program_name, Login ...
 - SQL SERVER读书笔记:阻塞与死锁
		
阻塞是事务隔离带来的副作用,而并不是SQL SERVER的错. 死锁则是互相争用资源而引发.由于死锁会选择牺牲者,所以死锁的危害没有阻塞大.但有时为了解决死锁,会采取对资源加锁,导致阻塞的方式来避免.
 - sql server 2000数据库 最近经常出现某进程一直占用资源,阻塞?死锁?
		
OA的数据库最近多次出现某进程一直占用资源,导致其他进程无法执行.使用sp_who2 和 sql server profiler跟踪查询,发现有以下几个语句常常占用资源: 1.declare @P1 ...
 - jstack简单使用,定位死循环、线程阻塞、死锁等问题
		
当我们运行java程序时,发现程序不动,但又不知道是哪里出问题时,可以使用JDK自带的jstack工具去定位: 废话不说,直接上例子吧,在window平台上的: 死循环 写个死循环的程序如下: pac ...
 - sqlserver监控阻塞(死锁)具体情况
		
公司sqlserver的监控系统主要是采用zabbix监控,但是zabbix的监控只能通过性能计数器给出报警,而无法给出具体的阻塞情况,比如阻塞会话.语句.时间等,所以需要配合sqlserver的一些 ...
 - sqlserver监控阻塞(死锁)具体情况(转)
		
公司sqlserver的监控系统主要是采用zabbix监控,但是zabbix的监控只能通过性能计数器给出报警,而无法给出具体的阻塞情况,比如阻塞会话.语句.时间等,所以需要配合sqlserver的一些 ...
 
随机推荐
- SAP Container Controls(容器)
			
BC_CONTROLS_TUTORIAL 效果 代码 REPORT bc_controls_tutorial. *------------------------------------------- ...
 - docker安装报错failure: repodata/repomd.xml from mirrors.aliyun.com_docker-ce_linux_centos_docker-ce.pro
			
1.进入 /etc/yum.repos.d 目录下,将所有有关 docker 的 repo 全部删掉 2.重新添加镜像 sudo yum-config-manager --add-repo https ...
 - Spring框架系列(10) - Spring AOP实现原理详解之AOP代理的创建
			
上文我们介绍了Spring AOP原理解析的切面实现过程(将切面类的所有切面方法根据使用的注解生成对应Advice,并将Advice连同切入点匹配器和切面类等信息一并封装到Advisor).本文在此基 ...
 - 数组基础篇(对应C++ Primer plus 4.10)
			
概要:数组是由一组同类型的元素组成的集合,在内存上是一片连续的存储空间.C++提供了三种数组的表示方法:普通数组,模板类vector(C++98 新增的标准模板库STL提供该模板类)和模板类array ...
 - CF484A Bits
			
CF484A Bits 题目 https://codeforces.com/problemset/problem/484/A 题解 思路 知识点:贪心,位运算. 每位独立考虑,要使 \(1\) 的数量 ...
 - CRM汇客 牛刀小试 5个BUG修复
			
1.权限管理-用户管理-高级搜索-手机号搜索不可用 1.1现象 1.2解决思路 1.2.1 定位接口 接口名:system/user/list 请求方式:GET请求 1.2.3 确定bug所在位置 b ...
 - String类常用的API
			
String类常用的API 字符串内容的比较: 注意: 不能使用 == 去比较两个字符串的内容.原理:比较的是字符串的地址. (如果两个字符串都是使用""进行赋值,那么他们都是放在 ...
 - 【RocketMQ】消息的消费
			
上一讲[RocketMQ]消息的拉取 消息消费 当RocketMQ进行消息消费的时候,是通过ConsumeMessageConcurrentlyService的submitConsumeRequest ...
 - React报错之Property 'X' does not exist on type 'HTMLElement'
			
正文从这开始~ 总览 在React中,当我们试图访问类型为HTMLElement 的元素上不存在的属性时,就会发生Property 'X' does not exist on type 'HTMLEl ...
 - 将Nginx配置成系统开机启动服务
			
# 如何将nginx配置成我们的系统服务 # 1.在/usr/lib/systemd/system目录下面配置nginx.service内容 # 如果想要详细了解制作的过程:https://blog. ...