`
yidianfengfan
  • 浏览: 125123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql innodb 死锁

阅读更多

最近一个模块执行时数据库老死锁,导致部分用户的数据没有更新。
发生死锁的方法在模块处理的最后数据更新部分,数据库操作如下:
updateScore{
winuser = getUserById(winId); //for update形式
//设置winuser
update winuser
winAward(winuser);  //奖励
updateGroupScore(winuser.getGroup())

loseruser = getUserById(loserId); //for update形式
//设置loseruser
Update(loseruser)
loserAward(loseruser)
updateGroupScore(loseruser.getGroup());
}

死锁发生在updateGroupScore的时候。导致winAward(),loserAward()也回滚。
用户部分发生争锁的情况可能性要低。锁应该是两个事务对更新组时发生。发生的相互持有对方的锁且又等待对方释放锁时发生的。以简单的两个事务为例:
Transaction1:                                     tranaction2:
updateGroupScore 5 //锁住 group 5
                                              updateGroupScore 2 //锁住 group 2
updateGroupScore 2 //waiting lock 2
											  updateGroupScore 5 //waiting lock 5

此时死锁就发生了。
何况这样操作的事务有很多,多个事务间相互等锁的几率就更大了。
目前想到方法:
  • 1. 在这个方法中加了个锁.
  • 2. 将winner, loser的处理分开,分成两个事务处理。这样在updateGroupScore就不会等锁
  • 3. 将updateGroupScore抽出, 想另外的方式进行更新。

分享到:
评论

相关推荐

    Mysql Innodb死锁情况分析与归纳.docx

    ### MySQL Innodb 死锁情况分析与归纳 #### 案例背景介绍 在实际数据库运维过程中,我们可能会遇到各种各样的问题,其中死锁是一个较为常见也较为棘手的问题之一。本文将以一个具体的案例为基础,对MySQL Innodb...

    几种不常见的MySQL InnoDB 死锁情况--1

    本篇文章将探讨几种不常见的MySQL InnoDB死锁情况。 一、死锁的概念与产生原因 死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力干涉它们都将无法推进下去。InnoDB引擎通过...

    mysql innodb死锁问题详解.docx

    MySQL的InnoDB存储引擎在处理并发事务时可能会遇到死锁问题,这主要发生在多个事务互相等待对方释放资源的情况下。死锁通常由四个必要条件引发: 1. 互斥条件:资源只能被一个事务使用。 2. 请求和保持条件:一个...

    何登成 - 管中窥豹——MySQL(InnoDB)死锁分析之道

    何登成在其演讲中深入探讨了MySQL(InnoDB)死锁问题,尤其对于死锁的分析提出了独到的见解和方法。以下是对何登成演讲内容的知识点详细梳理: ### 为什么选择“死锁” 何登成首先分享了他选择探讨死锁话题的原因,...

    详解MySQL(InnoDB)是如何处理死锁的

    MySQL的InnoDB存储引擎在处理死锁问题上采用了一系列策略,确保数据库的正常运行和高并发性能。首先,我们需要理解什么是死锁。死锁是指两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象,若无...

    mysql死锁的一些案例

    - 事务等待超时:MySQL的InnoDB存储引擎有死锁检测机制,当事务等待超过预设的超时时,会被自动回滚。 - 锁粒度不一致:行级锁与表级锁的混合使用可能导致死锁。 2. **死锁的检测与解决**: - InnoDB存储引擎...

    MySQL Innodb表导致死锁日志情况分析与归纳

    ### MySQL Innodb表导致死锁日志情况分析与归纳 #### 概述 在数据库管理领域,特别是针对MySQL的InnoDB存储引擎,了解并解决死锁问题是至关重要的。本文将详细探讨一个具体案例:当备份表格的SQL语句与删除该表...

    MYSQL 数据库死锁

    MySQL数据库死锁是数据库系统中常见...总之,MySQL数据库中的死锁是多并发环境下难以避免的问题,但通过理解死锁的原理、InnoDB的处理机制以及优化代码逻辑,我们可以有效地预防和解决死锁,确保数据库系统的稳定运行。

    管中窥豹——MySQL(InnoDB)死锁分析之道

    管中窥豹——MySQL(InnoDB)死锁分析之道 阿里巴巴高级数据库专家

    mysql死锁解决

    在MySQL中,尤其是在InnoDB存储引擎下,当检测到死锁时,MySQL会自动选择回滚其中一个事务来解除死锁状态。 #### 二、死锁产生的原因 1. **循环等待**:多个事务之间存在循环的资源等待关系。 2. **互斥条件**:...

    MySQL技术内幕 InnoDB存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    mysql死锁分析

    对于MySQL/InnoDB数据库而言,了解死锁的产生机制、分析死锁的方法以及如何预防死锁是非常重要的。 #### 一个不可思议的死锁 假设有一个表`dltask`,其结构如下: ```sql CREATE TABLE dltask ( id bigint ...

    一个最不可思议的MySQL死锁分析1

    在MySQL的InnoDB存储引擎中,一个令人困惑的死锁现象被提出。在描述的死锁场景中,有一个简单的表`dltask`,拥有一个由a、b、c三列组成的唯一索引,以及主键id。事务隔离级别设定为RR(Repeatable Read)。每个事务...

    Mysql InnoDB删除数据后释放磁盘空间的方法

    同时,了解InnoDB与其他存储引擎如MyISAM的差异,以及如何处理InnoDB的死锁和表损坏问题,也是提升MySQL数据库管理能力的重要部分。在遇到InnoDB `COUNT(*)` 计算速度慢的问题时,可以考虑使用索引或优化查询语句来...

    2013年中国数据库大会-27-深入解析MySQL InnoDB引擎

    2013年在中国举办的数据库大会上,主题为“深入解析MySQL InnoDB引擎”的演讲由Calvin Sun(孙春生)进行,他当时是Twitter的高级经理,此前在Oracle和MySQL等公司拥有丰富的经验。在这次大会上,他向与会者深入解析...

Global site tag (gtag.js) - Google Analytics