位置: 编程技术 - 正文

详解MySQL中的死锁情况以及对死锁的处理方法(mysql死锁的处理方法)

编辑:rootadmin

推荐整理分享详解MySQL中的死锁情况以及对死锁的处理方法(mysql死锁的处理方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql死锁产生的原因及解决方案,mysql的死锁,mysql死锁产生的原因及解决方案,mysql什么是死锁,mysql死锁的处理方法,mysql什么是死锁,mysql死锁的处理方法,mysql什么是死锁,内容如对您有帮助,希望把文章链接给更多的朋友!

当多个事务同时持有和请求同一资源上的锁而产生循环依赖的时候就产生了死锁。死锁发生在事务试图以不同的顺序锁定资源。以StockPrice表上的两个事务为例:

事务1

事务 #2

如果不走运的话,每个事务都可以执行完第一个语句,并在过程中锁住资源。然后每个事务都试图去执行第二行语句,当时却发现它被锁住了。两个事务将永远的等待对方完成,除非有其他原因打断死锁。

为了解决这个问题,数据库实现了各种死锁探查和超时机制。像InnoDB这样复杂的存储引擎会提示循环依赖并且立即返回错误。否则死锁将会导致查询非常缓慢。其他一些不好的做法是等待超时后放弃。当前InnoDB处理死锁的方式是回滚持有最少排他行级锁的事务。(几乎最简单的回滚的参考指标)

锁的行为是顺序是存储引擎决定的。因此,一些存储引擎可能会在特定的操作顺序下发生死锁,其他的可能没有。死锁有两种:一些是因为实际数据冲突而无法避免,一些是因为存储引擎的工作方式产生。

只有部分或者完全回滚其中的一个事务才可能打破死锁。死锁是事务系统中客观存在的事实,你的应该在设计上必须应该考虑处理死锁。一些业务系统可以从头重试事务。

如何处理死锁死锁是事务型数据库典型的问题,但是除非它们频繁出现以至于你更本不能运行某个事务,它们一般是不危险的。正常地,你必须编写你的应用程序使得它们总是准备如果因为死锁而 回滚一个事务就重新发出一个事务。

InnoDB使用自动行级锁定。即使在只插入或删除单个行的事务的情况下,你可以遇到死锁。这是因为这些操作不是真正的“极小的”,它们自动对插入或删除的行的(可能是数个)索引记录设置锁定。

你可以用下列技术对付死锁减少它们发生的可能性:

详解MySQL中的死锁情况以及对死锁的处理方法(mysql死锁的处理方法)

用Use SHOW INNODB STATUS来确定最后一个死锁的原因。这样可以帮助你调节应用程序来避免死锁。

总是准备着重新发出事务,如果它因为死锁而失败了。死锁不危险,再试一次。

经常提交你的事务。小事务更少地倾向于冲突。

如果你正使用锁定读,(SELECT ... FOR UPDATE或 ... LOCK IN SHARE MODE),试着用更低的隔离级别,比如READ COMMITTED。

以固定的顺序访问你的表和行。则事务形成良好定义的查询并且没有死锁。

添加精心选定的索引到你的表。则你的查询需要扫描更少的索引记录并且因此设置更少的锁定。使用EXPLAIN SELECT来确定对于你的查询,MySQL认为哪个索引是最适当的。

使用更少的锁定。如果你可以接受允许一个SELECT从一个旧的快照返回数据,不要给它添加FOR UPDATE或LOCK IN SHARE MODE子句。这里使用READ COMMITTED隔离级别是比较好的,因为每个在同一事务里的持续读从它自己新鲜的快照里读取。

如果没有别的有帮助的了,用表级锁定系列化你的事务。用LOCK TABLES对事务型表(如InnoDB)的正确方法是设置AUTOCOMMIT = 0 并且不调用UNLOCK TABLES直到你明确地提交了事务。例如,如果你需要写表t1并从表t读,你可以按如下做:

表级锁定使得你的事务很好地排队,并且死锁被避免了。

领一个系列化事务的方法是创建一个辅助的“semaphore” 表,它只包含一个单行。让每个事务在访问其它表之前更新那个行。以这种方式,所有事务以序列的方式发生。注意,InnoDB即时死锁检测算法也能在这种情况下起租用,因为系列化锁定是行级锁定。超时方法,用MySQL表级锁定,必须被用来解决死锁。

在应用程序中使用LOCK TABLES命令,如果AUTOCOMMIT=1,MySQL不设定InnoDB表锁定。

Mysql5升级到Mysql5.5的方法 安装5.5依赖安装包代码如下yuminstall-yautoconf*automake*zlib*libxml*ncurses-devel*libgcrypt*libtool*openssl*安装cmake代码如下yuminstall-ycmake在升级前,建议先将之前5.1的mys

Mysql5.7如何修改root密码 版本更新,原来user里的password字段已经变更为authentication_string版本更新缘故,好多网上的教程都不适用了,甚至连官网的文档也不是能够顺利操作的。

初始化MySQL用户(删除匿名用户) 安装完MySQL后,系统默认会创建一个不需要密码的root用户,和一个无用户名无密码的匿名用户(AnonymousAccount)。进行下面的初始化操作以合理授权,增

标签: mysql死锁的处理方法

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

上一篇:MySQL中由load data语句引起死锁的解决案例(mysql load local)

下一篇:Mysql5升级到Mysql5.5的方法(mysql升级-5.1升级到5.7)

  • 小规模纳税人发票可以抵扣吗
  • 递延所得税资产账务处理
  • 市政道路工程建筑包括什么
  • 实际发放股票股利是什么意思
  • 财政应返还额度与财政拨款收入的关系
  • 一般纳税人增值税可以抵扣吗
  • 金税四期什么时候正式上线
  • 销售防疫物资免水洗手液需要什么许可证
  • 交通补贴算工资收入吗
  • 税收分类编码不可用是什么原因
  • 小企业准则固定资产折旧每月折旧多折了
  • 未开票收入已报税怎么办
  • 高新企业帐务流程
  • 行政事业单位工作经费使用范围
  • 企业印花税算法
  • 生产企业成本核算流程及案例
  • 没有运输经营范围能不能开运输发票
  • 建筑行业异地预缴
  • 二手房增值税税率表2023年最新
  • 投资款的印花税的纳税义务时间
  • 资产损失申报方式
  • 处置打包债权如何缴纳个人所得税?
  • 企业拨给工会的补助怎么记账
  • 钱已确定收不回怎么办
  • 对公账户一直没有流水怎么办
  • mac电脑遇到问题而重新启动
  • PHP:xml_parser_create_ns()的用法_XML解析器函数
  • win7上网提速
  • 杜鹃花怎么养家庭养法视频
  • 如何做好记账会计
  • 复式记账法含义
  • PHP:mcrypt_module_is_block_algorithm()的用法_Mcrypt函数
  • 微信网页开发工具
  • vue页面路由传参
  • 增值税专用发票丢了怎么补救
  • 集合框架有何好处
  • 如何做进项税额明细表
  • 增值税地方留存比例2023
  • 浏览器任意链接在哪里
  • Python IDE之Thonny的介绍
  • SQLite教程(四):内置函数
  • mysql执行时间太长
  • c语言中的typedef struct
  • 普通发票验旧后怎么作废
  • 数据库系统中,用户通过什么访问数据
  • 企业低值易耗品降成本措施
  • 工地扬尘检测仪图片
  • 内帐收入怎么确定
  • 出口报关金额怎么算
  • 售出货物
  • 单位发给职工的餐费补贴我变卖了违法吗?
  • 事业单位如何调档案
  • 来料加工的增值税怎么核算
  • 教育费返还款计入收入吗
  • sqlserver数据库中的null值空值表示的是空格或零值
  • windows8命令提示符命令大全
  • WINDOWS SERVER 2008开启桌面主题具体步骤
  • 苹果电脑如何制作
  • 微信付费使用是真的吗
  • 计算机的硬盘
  • mac itunes在哪儿
  • Win10系统中怎么用vba控制鼠标
  • 创建网站根目录
  • win10 1511版本升级到1803
  • Android游戏开发案例教程小小弹球
  • c opengl
  • 删除命令del
  • 地盘正针的详解使用
  • js闭包的定义和用途
  • linux查看shell脚本内容
  • 禁止所有陌生人的来电设置
  • jQuery模仿阿里云购买服务器选择购买时间长度的代码
  • 浙江省增值税勾选平台
  • 安置残疾人就业增值税即征即退优惠
  • 落实与什么动词搭配
  • 发票事业单位有税号吗
  • 郑州契税怎么收
  • 税务局登记是什么
  • 税款复核需要多少天
  • 契税维修基金交给谁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设