参考博客:

mysql死锁问题分析(https://www.cnblogs.com/LBSer/p/5183300.html)

mysql insert锁机制(http://yeshaoting.cn/article/database/mysql insert锁机制/)

这是全网找到的比较好的两篇博客。

行锁:

InnoDB有三种行锁的算法:

1,Record Lock:单个行记录上的锁。

2,Gap Lock:间隙锁,锁定一个范围,但不包括记录本身。GAP锁的目的,是为了防止同一事务的两次当前读,出现幻读的情况。

3,Next-Key Lock:1+2,锁定一个范围,并且锁定记录本身。对于行的查询,都是采用该方法,主要目的是解决幻读的问题。

update、delete where为主键,只在单个行记录上锁。

不非主键索引上,会锁范围(上一个到下一个中间都会被锁)。

不在索引上,会锁整个表。

参考:https://www.cnblogs.com/zhoujinyi/p/3435982.html

锁的基本类型

据库上的操作可以归纳为两种:读和写。

  多个事务同时读取一个对象的时候,是不会有冲突的。同时读和写,或者同时写才会产生冲突。因此为了提高数据库的并发性能,通常会定义两种锁:共享锁和排它锁。

  

  

共享锁(Shared Lock,也叫S锁)(读锁)

排他锁(Exclusive Lock,也叫X锁) (写锁)

锁行一般都是X锁

表A字段a关联了表B字段id,则表A的insert会在表B对应索引行添加S锁。

  

查看一些设置

查看数据库版本:

select version();

查看数据库引擎:

show variables like '%engine%';

查看事务隔离级别:

select @@global.tx_isolation, @@session.tx_isolation, @@tx_isolation;

查看gap锁开启状态:

show variables like 'innodb_locks_unsafe_for_binlog';

查看innodb状态(包含最近的死锁日志)

show engine innodb status;

当发生锁等待时,可以通过以下命令查看各事务占用锁的情况。

select * from information_schema.innodb_locks;

注意lock_mode字段。

另外一篇非常有用的博客: http://www.ywnds.com/?p=8841

详细分析了如果有事务卡住,查看卡住的地方在哪里的步骤。

Mysql数据库死锁分析相关概念的更多相关文章

  1. MySQL数据库死锁分析

    背景说明: 公司内部一套自建分布式交易服务平台,在POC稳定性压力测试的时候出现了数据库死锁.(InnoDB引擎)由于保密性,假设是app_test表死锁了. 现象: 发生异常:Deadlock fo ...

  2. mysql数据库死锁的产生原因及解决办法

    这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下   数据库和操作系统一样,是一个多用户使用的共享资源.当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同 ...

  3. MySQL 数据库死锁

    数据库死锁 死锁的解决办法(1) 执行下面SQL,先查看哪些表被锁住了: select b.owner,b.object_name,a.session_id,a.locked_mode from v$ ...

  4. Mysql查询语句使用select.. for update导致的数据库死锁分析

    近期有一个业务需求,多台机器需要同时从Mysql一个表里查询数据并做后续业务逻辑,为了防止多台机器同时拿到一样的数据,每台机器需要在获取时锁住获取数据的数据段,保证多台机器不拿到相同的数据. 我们My ...

  5. 记一次线上MySQL数据库死锁问题

            最近线上项目报了一个MySQL死锁(DealLock)错误,虽说对业务上是没有什么影响的,由于自己对数据库锁这块了解不是很多,之前也没怎么的在线上碰到过.这次刚好遇到了,便在此记录一下 ...

  6. 关于在项目中遇到MySQL数据库死锁的问题

    在MySQL中, 当一个事务去更新某条数据, 还没有提交的时候, 第二个事务去更新该数据, 则会出现等待获取锁超时异常: >> Lock wait timeout exceeded; tr ...

  7. mysql数据库死锁的解决方案

    1. 查询锁表信息    show OPEN TABLES where In_use > 0;2. 查看当前数据库锁表的情况    SELECT * FROM information_schem ...

  8. Mybatis-update - 数据库死锁 - 获取数据库连接池等待

    最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题: update失败,原因是数据库死锁 select等待,原因是connection连接池被用光了,需要等 ...

  9. <转>一个最不可思议的MySQL死锁分析

    1 死锁问题背景 1 1.1 一个不可思议的死锁 1 1.1.1 初步分析 3 1.2 如何阅读死锁日志 3 2 死锁原因深入剖析 4 2.1 Delete操作的加锁逻辑 4 2.2 死锁预防策略 5 ...

随机推荐

  1. winform发布桌面程序后提示需开启“目录浏览”

    把发布文件里的publish.htm名字改为index.htm就好了

  2. 在执行 Database.SqlQuery Method (String, Object[]) 执行中出现错误

      执行类似于   var  params =  new SqlParameter[]{--};   Database.SqlQuery<Type>(sql1,params);   Dat ...

  3. Tomcat 配置文件的解析

    转载:https://www.cnblogs.com/sunshine-1/p/8990044.html https://www.cnblogs.com/kismetv/p/7228274.html ...

  4. 接口登录存在动态token

    Jmeter接口登录时获取到的参数token一直在变的问题,导致运行时总是报错 解决方法如下: 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name="_token&qu ...

  5. Android 应用资源及R文件的位置

    1.介绍 (1)常识 (2)在res目录下新建资源文件(例如数字资源) app--->res,选择res,右击new--->value resource file 2.字符资源(strin ...

  6. kotlin spring mvc request json 请求

    // json 代码{ /*用户信息*/ user: { username: '{$user.username}', headImg: '{$user.headImg}', targetId: '{$ ...

  7. POJ_3069 Saruman's Army 【贪心】

    一.题面 POJ3069 二.题意分析 我的理解是,可以在每个点设置一个监测点,能够监测到范围R内的所有其他点,那么问给出N个点的一维位置,需要在其中挑多少个监测点把所有点都监测到. 贪心解决: 1. ...

  8. P2801 教主的魔法

    传送门 $N$ 太大了主席树过不了 考虑分块 对每个块内的元素排序,询问就对大块二分查找,对两边小的部分暴力枚举 修改时维护 $add[i]$ 标记,维护当前块内整块已经加的数 那么整块的就直接修改 ...

  9. [转] 如何在ie11里使用a连接创建动态下载文件流

    [From] https://segmentfault.com/q/1010000009470664 查了资料,可以使用微软独家的msSaveBlob, 这个方法支持ie10及以上. var down ...

  10. npm install 卡住的时候的处理

    [From] http://www.eguidedog.net/doc/what-to-do-when-npm-install-hangs.php 翻译一下,npm install 经常卡在下载某个包 ...