当前位置: 首页 > news >正文

Mysql 死锁

http://www.cnblogs.com/benshan/archive/2013/05/09/3068886.html

 声明:以下讨论只是针对InnoDB存储引擎。


何为死锁?
 
死锁是对资源的分配和使用不当而造成的。是两个进程争夺某一资源而出现相互等待的现象。具体的来讲,出现死锁需要满足四个必要条件:
(1)互斥条件:每一个资源都只能被一个进程使用
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
很显然,出现死锁需要两个或者两个以上的进程,换句话说,死锁发生在并发的程序中。在Mysql中,由于目前只有InnoDB引擎使用事务(InnoDB支持锁),便有了InnoDB和死锁的旷世基情。

死锁的检测
 
1、通过使用Show innodb status检查引擎状态 ,可以看到哪些语句产生deadlock
2、MySQL提供了一个information_schema,通过查看innodb_locks、innodb_trx、innodb_lock_waits这几个表检测死锁。

因循环等待条件而产生的死锁只有可能是四种形式:两张表两行记录交叉申请互斥锁、同一张表则存在主键索引锁冲突、主键索引锁与非聚簇索引锁冲突、锁升级导致的锁等待队列阻塞。


死锁避免

1.如果使用insert…select语句备份表格且数据量较大,在单独的时间点操作,避免与其他sql语句争夺资源,或使用select into outfile加上load data infile代替 insert…select,这样不仅快,而且不会要求锁定
2. 一个锁定记录集的事务,其操作结果集应尽量简短,以免一次占用太多资源,与其他事务处理的记录冲突。
3.更新或者删除表格数据,sql语句的where条件都是主键或都是索引,避免两种情况交叉,造成死锁。对于where子句较复杂的情况,将其单独通过sql得到后,再在更新语句中使用。
4. sql语句的嵌套表格不要太多,能拆分就拆分,避免占有资源同时等待资源,导致与其他事务冲突。
5. 对定点运行脚本的情况,避免在同一时间点运行多个对同一表进行读写的脚本,特别注意加锁且操作数据量比较大的语句。
6.应用程序中增加对死锁的判断,如果事务意外结束,重新运行该事务,减少对功能的影响。
 
 

转载于:https://www.cnblogs.com/xiaobaxiing/p/6539954.html

相关文章:

  • Centos Svn 仓库部署
  • 编码规范
  • Java数据结构之Set学习总结
  • 调用PostgreSQL存储过程,找不到函数名的问题
  • CAP理论
  • HDU 2501 Tiling_easy version
  • 透明代理Transparent Proxy
  • linux 配置软连接的需要注意的一个问题
  • zookeepr集群环境搭建
  • 排球比赛积分规则---三层架构
  • [译] 看动画,学 RxJS
  • (zhuan) 一些RL的文献(及笔记)
  • java 的底层通信--Socket
  • java.util.concurrent.CountDownLatch用方法
  • PSI分析
  • 0基础学习移动端适配
  • CentOS7 安装JDK
  • Java编程基础24——递归练习
  • leetcode98. Validate Binary Search Tree
  • magento 货币换算
  • node-glob通配符
  • opencv python Meanshift 和 Camshift
  • PHP的Ev教程三(Periodic watcher)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Web标准制定过程
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 区块链将重新定义世界
  • 通过npm或yarn自动生成vue组件
  • 微信支付JSAPI,实测!终极方案
  • 线上 python http server profile 实践
  • 想写好前端,先练好内功
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (1) caustics\
  • (4)logging(日志模块)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (搬运以学习)flask 上下文的实现
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (规划)24届春招和25届暑假实习路线准备规划
  • (原)本想说脏话,奈何已放下
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .net 4.0发布后不能正常显示图片问题
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core 版本不支持的问题
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net core控制台应用程序初识
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET/C# 使用反射注册事件
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net项目IIS、VS 附加进程调试
  • .net与java建立WebService再互相调用