查看锁记录等待时间:
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
把超时等待时间修改为5秒: SET innodb_lock_wait_timeout=5;
 
注意行锁和表锁:mysql innodb存储引擎支持行锁
select 不会锁表,已经产生锁的表也不影响查询,除非select xxx for update;因为 for update会请求加锁
update xxx 不带where条件,锁表(已验证)
update xxx where 带条件,锁指定行(必须满足where条件只要有一个条件用上索引,否则行锁变成表锁)
update xxx where id in ( select id from xxx ) 带条件复杂查询,锁表(1、即使select子查询用到了索引,也会锁表;2、update连带select子查询的所有表都会加锁,加锁规则同上)
update 锁表之后,如果insert是会受影响的(唯一不受影响的是select 不带for update语句)
测试方法:
打开查询编辑器:
set autocommit = 0;只针对当前连接
相关测试语句
commit;
新开连接,打开查询编辑器:
相关语句
 
结论:不带where 条件锁表,带where条件不带索引锁表,嵌套子查询连带加锁
锁表主要针对insert update remove,基本上不影响select除非,手动加for update请求加锁
 
查看事务提交模式:
show session variables like 'autocommit';
show global variables like 'autocommit';
Value的值为ON,表示autocommit开启。OFF表示autocommit关闭。
 
查看mysql存储引擎模式:
SHOW ENGINES;
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys
 
 
死锁1:
高并发情况下,insert 使用 where 会死锁,列如:
insert into aut_sign_heartbeat
(
?
)
SELECT
?
FROM DUAL
WHERE NOT EXISTS(
SELECT id FROM aut_sign_heartbeat WHERE CRIMINAL_ID = #{criminalId} AND DEVICE_TYPE=#{deviceType} AND create_time = #{createTime}
)
 
死锁解决:
SELECT * FROM information_schema.INNODB_TRX;
trx_rows_locked: 事务锁定行数
trx_rows_modified: 事务修改行数
#首先查询是否锁表
SHOW OPEN TABLES WHERE In_use > 0;
#查询进程,保证拥有超级管理员权限
SHOW PROCESSLIST;
#杀死进程
KILL 4503;
#查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
#查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

mysql 死锁解决的更多相关文章

  1. mysql死锁+解决

    自己作死,navicat不恰当的操作导致了表死锁,操作如下: 给表新加字段:name 没有选择允许为空,但是有没有设置初始值,所以运行的结果就是数据库表里有了name不允许为空但是确实为空的记录: 然 ...

  2. mysql 死锁解决办法

    查询表的时候,发现一圈圈转啊转,就是不出来数据,猜测表被锁住 解决办法 : mysql> show processlist ; mysql> kill 4;       说明 : 4为 i ...

  3. MySQL死锁问题分析及解决方法实例详解(转)

      出处:http://www.jb51.net/article/51508.htm MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1.MySQL常用 ...

  4. MySql 死锁时的一种解决办法【转】

    转自:http://blog.csdn.net/mchdba/article/details/38313881 之前也遇到一次,今天又遇到了这个问题,所以这次必须解决,网上找到这篇文章帮了大忙,方便以 ...

  5. 手把手教你分析解决MySQL死锁问题

    在生产环境中如果出现MySQL死锁问题该如何排查和解决呢,本文将模拟真实死锁场景进行排查,最后总结下实际开发中如何尽量避免死锁发生. 一.准备好相关数据和环境 当前自己的数据版本是8.0.22 mys ...

  6. MySQL 死锁问题分析

    转载: MySQL 死锁问题分析 线上某服务时不时报出如下异常(大约一天二十多次):"Deadlock found when trying to get lock;". Oh, M ...

  7. 为什么MySQL死锁检测会严重降低TPS

    在大量的客户端,更新数据表的同一行时,会造成数据库的吞吐量大幅降低. 很多数据库的前辈和同行分别通过实验和源码的方法,定位到了罪魁祸首----MySQL死锁检测 实验方式:http://blog.cs ...

  8. Mysql死锁问题解决方式 & 聚簇索引、隔离级别等知识

    参考了这篇文章:http://www.cnblogs.com/LBSer/p/5183300.html  <mysql死锁问题分析> 写的不错. 如果Mysql死锁,会报出: 1.1 死锁 ...

  9. 一次MySQL死锁问题解决

    一次MySQL死锁问题解决 一.环境 CentOS, MySQL 5.6.21-70, JPA 问题场景:系统有定时批量更新数据状态操作,每次更新上千条记录,表中总记录数约为500W左右. 二.错误日 ...

  10. MySQL 死锁与日志二三事

    最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现.甚至有些异常还比较诡异,最后 root cause 分析颇费周折.那实际业务当 ...

随机推荐

  1. mybatis核心配置文件—设置别名typeAliases

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  2. AtCoder Beginner Contest 272 - G - Yet Another mod M

    随机 + 数论 题意 Submission #35524126 - AtCoder Beginner Contest 272 给一个长度为 \(n\;(1<=n<=5000)\) 的数组 ...

  3. adb 测试常用命令

    adb 环境安装并配置环境变量 常用命令汇总: 1.查看电脑已经连接的手机设备 adb devices 2.通过logcat日志获取应用APP入口 mac/linux:adb logcat Activ ...

  4. Linux 网卡(遇见问题的解决)

    主配置文件 /etc/sysconfig/network-scripts/ifcfg-eth1 里面的详细内容 DEVICE=eth1 网卡名称 TYPE=Ethernet 类型,Ethernet|B ...

  5. ftp服务无法覆盖同名文件

    1.linux修改/etc/pure-ftpd/pure-ftpd.conf的AutoRename  yes 重启ftp服务 2.windows server修改 选中ftp站点,选择右侧高级设置,选 ...

  6. js apply 与 call

    简介 用来调用方法,第一个参数替换掉用方法的this对象 区别:call:A.fn.call(B, arg1,arg2,argn...),后面的参数用逗号分隔 apply:A.fn.apply(B, ...

  7. css3边框属性学习

    1.boder-radius <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...

  8. docker命令、简单创建镜像、dockerfile实战、Dockerfile语法、镜像分层、Volume介绍

    docker的常用命令: docker pull 获取imagedocker build 创建imagedocker images 列出imagedocker run 运行containerdocke ...

  9. 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告4

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验四 恶意代码技术     学生姓名 陈禹 年级 2018 区队 ...

  10. MATLAB 多行注释

    自用的两种方法 1: %{ 若干语句 } % 2.快捷键CTRL+R,取消注释CTRL+T