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

MySQL Innodb的死锁问题

阅读更多
今天遇到了数据库的死锁问题,导致应用无法提供服务。当时只好重启tomcat,现在还是会不断的提示死锁,只是服务还能跑。
引用

100528 14:16:03
*** (1) TRANSACTION:
TRANSACTION 1 720592357, ACTIVE 0 sec, process no 3588, OS thread id 1337043264 inserting
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1216, undo log entries 1
MySQL thread id 4380151, query id 549555384 192.168.0.98 root update
insert into by_useronline(byid,logintime,nickname,sex,birthday,area) values(31936074,now(),'????',1,'1989-11-14',119)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 827664 n bits 1056 index `byid` of table `byread/by_useronline` trx id 1 720592357 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 400 PHYSICAL RECORD: n_fields 2; 1-byte offs TRUE; info bits 0
0: len 4; hex 01e74ed9; asc   N ;; 1: len 4; hex 16d9283d; asc   (=;;

*** (2) TRANSACTION:
TRANSACTION 1 720592355, ACTIVE 0 sec, process no 3588, OS thread id 1178097984 setting auto-inc lock, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1216
MySQL thread id 4380129, query id 549555386 192.168.0.98 root update
insert into by_useronline(byid,logintime,nickname,sex,birthday,area) values(35707122,now(),'?,1,'1991-06-22',1)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 827664 n bits 1056 index `byid` of table `byread/by_useronline` trx id 1 720592355 lock_mode X locks gap before rec
Record lock, heap no 400 PHYSICAL RECORD: n_fields 2; 1-byte offs TRUE; info bits 0
0: len 4; hex 01e74ed9; asc   N ;; 1: len 4; hex 16d9283d; asc   (=;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
TABLE LOCK table `byread/by_useronline` trx id 1 720592355 lock mode AUTO-INC waiting
*** WE ROLL BACK TRANSACTION (2)

InnoDB会自动的检测死锁进行回滚,或者终止死锁的情况。
引用

InnoDB automatically detects transaction deadlocks and rolls back a transaction or transactions to break the deadlock. InnoDB tries to pick small transactions to roll back, where the size of a transaction is determined by the number of rows inserted, updated, or deleted.


如果参数innodb_table_locks=1并且autocommit=0时,InnoDB会留意表的死锁,和MySQL层面的行级锁。另外,InnoDB不会检测MySQL的Lock Tables命令和其他存储引擎死锁。
你应该设置innodb_lock_wait_timeout来解决这种情况。

innodb_lock_wait_timeout是Innodb放弃行级锁的超时时间。
引用

InnoDB is aware of table locks if innodb_table_locks = 1 (the default) and autocommit = 0, and the MySQL layer above it knows about row-level locks. Otherwise, InnoDB cannot detect deadlocks where a table lock set by a MySQL LOCK TABLES  statement or a lock set by a storage engine other than InnoDB is involved. You must resolve these situations by setting the value of the innodb_lock_wait_timeout system variable.
分享到:
评论

相关推荐

    mysql innodb死锁问题详解.docx

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

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

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

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

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

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

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

    mysql死锁的一些案例

    在实际应用中,理解这些概念并结合具体的案例分析,能够有效地防止和处理MySQL中的死锁问题,提高系统的稳定性和效率。对于"load file异常",需要根据具体错误信息来定位问题并进行解决,确保数据导入的顺利进行。

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

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

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

    在数据库管理领域,特别是针对MySQL的InnoDB存储引擎,了解并解决死锁问题是至关重要的。本文将详细探讨一个具体案例:当备份表格的SQL语句与删除该表部分数据的SQL语句同时运行时,MySQL如何检测到死锁并打印出相应...

    MYSQL 数据库死锁

    下面我们将深入探讨MySQL中的InnoDB存储引擎如何处理死锁,以及如何通过实际例子来理解这个问题。 首先,InnoDB存储引擎是MySQL中默认的事务型存储引擎,它支持行级锁定,以减少锁定资源的开销并提高并发性能。然而...

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

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

    mysql死锁分析

    #### 死锁问题背景 在MySQL的使用过程中,死锁是一个较为常见的现象,尤其是在并发量较大的应用场景下。死锁的发生往往会给系统带来不可预知的影响,严重时甚至会导致整个数据库服务不可用。对于MySQL/InnoDB数据库...

    mysql死锁解决

    本文将详细介绍MySQL中的死锁现象、其产生的原因以及如何有效地检测与解决死锁问题。 #### 一、死锁定义 死锁是指两个或两个以上的事务在执行过程中,由于每个事务都持有某些资源且又都在等待其他事务释放其持有的...

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

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

    MySQL REPLACE死锁问题深入剖析1

    这包括使用SHOW ENGINE INNODB STATUS命令查看锁状态,以及利用事务的回滚(ROLLBACK)和重试(TRY...AGAIN)机制来处理死锁。 总之,MySQL中的REPLACE语句在处理死锁和并发控制时具有一定的复杂性,理解其背后的锁...

    该如何解决MySQL中的死锁问题.txt

    解决MySQL中的死锁问题通常涉及多个方面,包括监控死锁、分析死锁原因、优化事务设计以及调整系统配置等。以下是一些解决MySQL中死锁问题的建议和方法: 监控死锁: 使用SHOW ENGINE INNODB STATUS命令来查看InnoDB...

    MySQL Innodb锁解决并发问题

    ### MySQL Innodb锁解决并发问题 #### 一、问题描述及解决过程 在现代数据库管理系统中,处理并发访问是至关重要的。特别是在高并发场景下,如何确保数据的一致性和完整性成为了一个挑战。本文将通过一个具体的...

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

    MySQL中的死锁问题是一个复杂而微妙的议题,尤其是在数据库优化和并发控制中。本文将深入探讨一个看似不可能发生的死锁案例,并分析其背后的原理。死锁通常发生在多个事务相互等待对方释放资源的情况下,但在这个...

Global site tag (gtag.js) - Google Analytics