mysql死锁示例
MySQL有三种锁的级别:页级、表级、行级。 
MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level    
locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。    
MySQL这3种锁的特性可大致归纳如下:    
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。    
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。    
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
示例1:
-- 按行获取行锁   
-- 获取主键的共享锁    
insert into logging_exceptionlog_history_id_2 SELECT * from logging_exceptionlog_history_id;    
-- 获取主键的互斥锁    
delete from logging_exceptionlog_history_id where id > 100 and id < 1000;
show engine innodb status; 查看innodb引擎状态,可查看最近的死锁情况

示例2:
表t1
CREATE TABLE `t1` (   
  `ID` int(11) NOT NULL AUTO_INCREMENT,    
  `Name` varchar(64) DEFAULT NULL,    
  `Age` int(11) DEFAULT NULL,    
  `PostTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,    
  PRIMARY KEY (`ID`)    
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
会话1   
-- 全局的自动提交设为0,即不自动提交,然后另开一个会话查询autocommit状态,当前会话可能还没起作用    
set GLOBAL autocommit = 0;
会话2
-- 另开一个会话查询autocommit状态
show VARIABLES like '%autocommit%';
-- 插入一条记录   
INSERT into t1(Name, Age) values('xxx', 23);
会话3
show VARIABLES like '%autocommit%';   
-- 使用共享锁查询表,注意一定要加上 lock in share mode,否则不会出现死锁    
select * from t1 lock in share mode;
查看
select * from INNODB_LOCK_WAITS;

select * from INNODB_LOCKS;

select * from INNODB_TRX;

连接查询, 只需要使用这个sql即可查询上述三表的信息
select a.requesting_trx_id, c.lock_mode as wait_lock_mode,   
c.lock_type as wait_lock_type, c.lock_table as wait_lock_table,    
c.lock_index as wait_lock_index, c.lock_data as wait_lock_data,    
e.trx_state as wait_trx_state, e.trx_query as wait_trx_query,    
a.blocking_trx_id,b.lock_mode as block_lock_mode, b.lock_type as block_lock_type,    
b.lock_table as block_lock_table, b.lock_index as block_lock_index, b.lock_data as block_lock_data,    
d.trx_state as block_trx_state, d.trx_query as block_trx_query    
from information_schema.INNODB_LOCK_WAITS a    
     INNER JOIN information_schema.INNODB_LOCKS b on a.blocking_lock_id = b.lock_id    
     INNER JOIN information_schema.INNODB_LOCKS c on a.requested_lock_id = c.lock_id    
     INNER JOIN information_schema.INNODB_TRX d on a.blocking_trx_id = d.trx_id    
     INNER JOIN information_schema.INNODB_TRX e on a.requesting_trx_id = e.trx_id

mysql死锁示例的更多相关文章
- Mysql 死锁问题
		Innodb锁系统(4) Insert/Delete 锁处理及死锁示例分析 http://mysqllover.com/?p=431 关于innodb死锁 http://afei2.sinaapp.c ... 
- 手把手教你分析解决MySQL死锁问题
		在生产环境中如果出现MySQL死锁问题该如何排查和解决呢,本文将模拟真实死锁场景进行排查,最后总结下实际开发中如何尽量避免死锁发生. 一.准备好相关数据和环境 当前自己的数据版本是8.0.22 mys ... 
- 记一次排查线上MySQL死锁过程,不能只会curd,还要知道加锁原理
		昨晚我正在床上睡得着着的,突然来了一条短信. 啥,线上MySQL死锁了,我赶紧登录线上系统,查看业务日志. 能清楚看到是这条insert语句发生了死锁. MySQL如果检测到两个事务发生了死锁,会回滚 ... 
- MySQL 死锁问题分析
		转载: MySQL 死锁问题分析 线上某服务时不时报出如下异常(大约一天二十多次):"Deadlock found when trying to get lock;". Oh, M ... 
- 为什么MySQL死锁检测会严重降低TPS
		在大量的客户端,更新数据表的同一行时,会造成数据库的吞吐量大幅降低. 很多数据库的前辈和同行分别通过实验和源码的方法,定位到了罪魁祸首----MySQL死锁检测 实验方式:http://blog.cs ... 
- JAVA使用jdbc连接MYSQL简单示例
		以下展示的为JAVA使用jdbc连接MYSQL简单示例: import java.sql.DriverManager; import java.sql.ResultSet; import java.s ... 
- Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识
		参考了这篇文章:http://www.cnblogs.com/LBSer/p/5183300.html <mysql死锁问题分析> 写的不错. 如果Mysql死锁,会报出: 1.1 死锁 ... 
- 一次MySQL死锁问题解决
		一次MySQL死锁问题解决 一.环境 CentOS, MySQL 5.6.21-70, JPA 问题场景:系统有定时批量更新数据状态操作,每次更新上千条记录,表中总记录数约为500W左右. 二.错误日 ... 
- MySQL死锁案例分析与解决方案
		MySQL死锁案例分析与解决方案 现象: 数据库查询: SQL语句分析: mysql. 并发delete同一行记录,偶发死锁. delete from x_table where id=? ... 
随机推荐
- json传参应用
			json传参应用 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言.易于人阅 ... 
- c3p0配置xml
			c3p0-config.xml <c3p0-config> <default-config> <property name="automaticTestTabl ... 
- MongoDB 删除数据库
			MongoDB 删除数据库 语法 MongoDB 删除数据库的语法格式如下: db.dropDatabase() 删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名. 实例 以下 ... 
- spark性能调优:资源优化
			在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ... 
- group by和distinct语句的执行顺序
			同一条语句之中,如果同时有group by和distinct语句,是先group by后distinct,还是先distinct后group by呢? 先说结论:先group by后distinct. ... 
- Internet Explorer 无法启用 JavaScript 怎么办?
			在 Internet Expllorer 8/9 中,有些同学在浏览网页时,收到提示:“需要启用 JavaScript …”,并且会发现网页上某些功能不能用了,比如点击网页里的按钮没反应等等. 怎么启 ... 
- (转)C#与Java的证书密钥转换
			前言 最近由于项目需求,服务端由c#编写,客户端由java编写.通信数据使用RSA非对称加密.但是java和c#生成的密钥格式是不一样的,所以需要转换格式才可以正常使用.网上搜到使用java进行格式转 ... 
- delphi构造&析构调用顺序
			_ClassCreate ->Create ->AfterConstruction(->DoCreate / OnCreate) BeforeDestruction(->DoD ... 
- How to get the underlying SSRS Report Query, reset query , add your own ranges and execute report [AX2012]
			Below is the small code snippet to get the underlying query of the SSRS report, reset query, prompt ... 
- Python之Flask Web开发
			下载python包管理工具Pip: 访问网址:https://pip.pypa.io/en/stable/installing/ 下载文件get-pip.py到本地计算机 定位到get-pip. ... 
