参考博客:

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. 【guava】对象处理

    一,equals方法 我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.goog ...

  2. 更改Linux下的时间

    1.使用tzseletect glibc-common-2.12-1.192.el6.x86_64 : Common binaries and locale data for glibc Repo : ...

  3. 第9项:尽量使用try-with-resources而不是try-finally(Prefer try-with-resources to try-finally)

      Java库包含许多必须通过调用close方法手动关闭的资源. 示例包括InputStream,OutputStream和java.sql.Connection. 关闭资源经常被客户忽视,可预见的可 ...

  4. 使用C#实现SSLSocket加密通讯 Https

    原文链接 http://blog.csdn.net/wuyb_2004/article/details/51393290 using System; using System.Collections; ...

  5. SLAM入门必收藏的资料

    搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C+ ...

  6. Qt 学习之路 2(49):自定义只读模型

    Qt 学习之路 2(49):自定义只读模型 豆子 2013年5月5日 Qt 学习之路 2 18条评论 model/view 模型将数据与视图分割开来,也就是说,我们可以为不同的视图,QListView ...

  7. Qt 学习之路 2(41):model/view 架构

    Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应 ...

  8. HTML 5 桌面提醒

    <script> function showNotice(title,msg){ var Notification = window.Notification || window.mozN ...

  9. docker大概理解

    #是啥# 轻量级的虚拟机,占用资源远小于一般意义上的虚拟机(例如:vmware,hyper-v) #特点# 启动快,体积小,开销少 #本质# Linux容器的一种封装 参考: 阮一峰博客 http:/ ...

  10. python 并发之多进程实现

    一.multipricessing模块的介绍 python中的多线程无法利用多核优势,如果想要充分的使用多核CPU资源,在python中大部分情况下需要用多线程,python提供了multiproce ...