位置: 编程技术 - 正文

MySQL数据库的一次死锁实例分析(mysql数据库的介绍)

编辑:rootadmin

推荐整理分享MySQL数据库的一次死锁实例分析(mysql数据库的介绍),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql数据库用法,mysql数据库的基本操作,mysql数据库一张表能存多少记录,mysql数据库的完整步骤,mysql数据库sid,mysql 数据库,mysql数据库一张表能存多少记录,mysql 数据库,内容如对您有帮助,希望把文章链接给更多的朋友!

1、故事起因于年月日的一个生产bug。业务场景是:归档一个表里边的数据到历史表里边,同是删除主表记录。

2、背景场景简化如下(数据库引擎InnoDb,数据隔离级别RR[REPEATABLE])

3、具体执行顺序

Transcation1 Transcation2 begin; — 这条sql得到test1表主键索引锁共享锁S(id=1) insert into test2 select * from test1 where id = 1; begin; — 这条sql试图获取test1表主键索引锁共享锁S(id=1),但是已经被T1占有,所以它进入锁请求队列. insert into test2 select * from test1 where id = 1; — 这条sql试图把自己拥有的test1表主键索引锁共享锁S(id=1)升级为排它锁X(id=1) — 这时T1也发起一个锁请求,这个时候mysql发现锁请求队列里边已存在一个事物T2对(id=1)的这条记录申请了S锁,死锁产生了。 delete from test1 where id = 1; 死锁产生后mysql根据两个事务的权重,事务2的权重更小,被选为死锁的牺牲者,rollback。 T2 rollback 之后T1成功获取了锁执行成功

Mysql 官方解释

Deadlock occurs here because client A needs an X lock to delete the row. However, that lock request cannot be granted because client B already has a request for an X lock and is waiting for client A to release its S lock. Nor can the S lock held by A be upgraded to an X lock because of the prior request by B for an X lock. As a result, InnoDBgenerates an error for one of the clients and releases its locks. The client returns this error。

实际场景和mysql文档有些区别,文档里边要获取的是X锁。具体事例里边要获取的是S锁。

下面我们来具体的一步步分析下mysql的死锁

1、MySQL常用存储引擎的锁机制

  MyISAM和MEMORY采用表级锁(table-level locking)

  BDB采用页面锁(page-level locking)或表级锁,默认为页面锁

  InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁

2、各种锁特点

  表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低

  行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高

  页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

3、各种锁的适用场景

  表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,如Web应用

  行级锁则更适合于有大量按索引条件并发更新数据,同时又有并发查询的应用,如一些在线事务处理系统

MySQL数据库的一次死锁实例分析(mysql数据库的介绍)

4、死锁

  是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

  表级锁不会产生死锁。所以解决死锁主要还是针对于最常用的InnoDB。

5、死锁举例分析

  在MySQL中,行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。

  在UPDATE、DELETE操作时,MySQL不仅锁定WHERE条件扫描过的所有索引记录,而且会锁定相邻的键值,即所谓的next-key locking。

  例如,一个表db。tab_test,结构如下:

  id:主键;

  state:状态;

  time:时间;

  索引:idx_1(state,time)

  出现死锁日志如下:

  原因分析:

  当“update tab_test set state=,time=now() where state= and time < date_sub(now(), INTERVAL minute)”执行时,MySQL会使用idx_1索引,因此首先锁定相关的索引记录,因为idx_1是非主键索引,为执行该语句,MySQL还会锁定主键索引。

  假设“update tab_test set state=,time=now () where id in ()”几乎同时执行时,本语句首先锁定主键索引,由于需要更新state的值,所以还需要锁定idx_1的某些索引记录。

  这样第一条语句锁定了idx_1的记录,等待主键索引,而第二条语句则锁定了主键索引记录,而等待idx_1的记录,这样死锁就产生了。

  6、解决办法

  拆分第一条sql,先查出符合条件的主键值,再按照主键更新记录:

  关于MySQL死锁问题的实例分析及解决方法就介绍到这里了,希望本次的介绍能够对您有所收获!

Mysql 官方文档:

Mysql事项,视图,函数,触发器命令(详解) 事项开启和使用//修改表的引擎altertableaengine=myisam;//开启事务begin;//关闭自动提交setautocommit=0;//扣updatebanksetmoney=money-wherebid=1;//回滚,begin开始的所有

SQL 四种连接-左外连接、右外连接、内连接、全连接详解 SQL的四种连接-左外连接、右外连接、内连接、全连接今天在看一个遗留系统的数据表的时候发现平时查找的视图是FULLOUTJOIN的,导致平时的数据记录要

centos 7系统下编译安装 mysql5.7教程 一、安装约定mysql安装路径:/usr/local/mysqlmysql数据库路径:/data/mysqlmy配置文件路径:/usr/local/mysql/my.cnf二、卸载mariadb#rpm-qa|grepmariadb#rpm-e--nodepsmariadb-libs-5

标签: mysql数据库的介绍

本文链接地址:https://www.jiuchutong.com/biancheng/349271.html 转载请保留说明!

上一篇:利用rpm安装mysql 5.6版本详解(利用rpm安装软件包时,应使用命令选项)

下一篇:Mysql事项,视图,函数,触发器命令(详解)(mysql事务视图)

  • 账面成本包含增值税吗
  • 税后经营净利率和营业净利率的区别
  • 资产处置收益是什么意思
  • 个体餐饮要交什么税
  • 信息技术服务企业研发费用加计扣除
  • 事业单位预收账款属于什么科目
  • 当期留抵税额怎么计算
  • 滞纳金用留抵增值税交怎么处理
  • 企业临时账户是什么意思
  • 销售种子的税种有哪些税率为多少?
  • 租赁类专票不含增值税吗
  • 增值税即征即退操作流程
  • 商品房所有者是什么
  • 个税没有扣除项,需要填写和确认吗
  • 契税和印花税入哪个科目
  • 同一个单位,应收应付都有,怎么调账
  • 作废发票如何管理
  • 车船税计入什么费用
  • 小规模企业其他业务收入税率
  • 工商注册需要提供什么
  • 开具发票的收入如何做账务处理?
  • 劳务工程款和工人工资的区别
  • win10提示病毒防护已过期
  • mac文本文件
  • 一个产品要有什么认证
  • 事业单位自筹什么意思
  • 没有签订劳动合同上班期间受伤怎么赔偿
  • 苹果mac系统桌面空间不够
  • win7系统为什么没有无线网络连接
  • 使用PHP similar text计算两个字符串相似度
  • 系统盘怎么重装系统win7
  • php数组函数,选班长
  • 仙客来养殖方法和注意事项视频
  • css图片适应div
  • 入门易学
  • 建筑企业取得发票难
  • 冬日里的科赫尔湖,德国巴伐利亚州 (© Reinhard Schmid/eStock Photo)
  • 单位缴费基数申报提交了能改吗
  • 个人所得税现金流量表属于哪一项
  • 反射dll
  • php socketio
  • 购买二手设备
  • 什么是固定资产?其特征有哪些
  • 出库单可以自制吗
  • 增值税出口免税不退税
  • 制造费用属于哪一类会计科目
  • 财务会计的主要目标和工作内容包括
  • sql server中的编程语言
  • sqlserver2005使用教程
  • 个人所得税汇算清缴怎么计算
  • 清卡和抄报税是什么意思
  • 一般纳税人季度所得税怎么计算
  • 现金日记账的结账方法
  • 净资产越来越少会有什么风险
  • 已认证未记账
  • 企业法人个人贷款企业承担吧?
  • 员工自己承担的社保费用进入管理费用吗
  • 代开专票作废退税怎么做账?
  • 年度所得税未在第一季度所得税申报前汇算清缴
  • 认证后的进项税额留抵退税
  • sql 随机
  • MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理
  • 连接mysql数据的四要素
  • sqlserver性能优化
  • 快启动U盘怎么进去
  • windows xp退役
  • Cocos2dx3.2 Crazy Tetris 基本设置及主菜单页面(菜单、按钮)
  • dos批处理命令大全
  • 教你用纸折一只会跳的小兔子,非常好玩,小朋友都喜欢
  • jquery中的siblings方法
  • js中arguments
  • scp 将数据从一台linux服务器复制到另一台linux服务器
  • unity3d怎么编程
  • 黑龙江税务局副局长
  • 济南市地税局纳税服务中心孙凯简历
  • 我国税制结构是怎样的
  • 深圳车牌注销需要车辆到场吗
  • 社保并入税务局的时间
  • 低收入个人所得税
  • 浙江省增值税专用发票票样
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设