巧用MySQL InnoDB引擎锁机制解决死锁问题

作者:艾文 时间:2008-12-19 17:24:00 

最近,在项目开发过程中,碰到了数据库死锁问题,在解决问题的过程中,笔者对MySQL InnoDB引擎锁机制的理解逐步加深。

案例如下:

在使用Show innodb status检查引擎状态时,发现了死锁问题:

*** (1) TRANSACTION:

TRANSACTION 0 677833455, ACTIVE 0 sec, process no 11393, OS thread id 278546 starting index read

mysql tables in use 1, locked 1

LOCK WAIT 3 lock struct(s), heap size 320

MySQL thread id 83, query id 162348740 dcnet03 dcnet Searching rows for update

update TSK_TASK set STATUS_ID=1064,UPDATE_TIME=now () where STATUS_ID=1061 and MON_TIME*** (1) WAITING FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 0 page no 849384 n bits 208 index `PRIMARY` of table `dcnet_db/TSK_TASK` trx id 0 677833455 lock_mode X locks rec but not gap waiting

Record lock, heap no 92 PHYSICAL RECORD: n_fields 11; compact format; info bits 0

0: len 8; hex 800000000097629c; asc b ;; 1: len 6; hex 00002866eaee; asc (f ;; 2: len 7; hex 00000d40040110; asc @ ;; 3: len 8; hex 80000000000050b2; asc P ;; 4: len 8; hex 800000000000502a; asc P*;; 5: len 8; hex 8000000000005426; asc T&;; 6: len 8; hex 800012412c66d29c; asc A,f ;; 7: len 23; hex 75706c6f6164666972652e636f6d2f6 8616e642e706870; asc xxx.com/;; 8: len 8; hex 800000000000042b; asc +;; 9: len 4; hex 474bfa2b; asc GK +;; 10: len 8; hex 8000000000004e24; asc N$;;

*** (2) TRANSACTION:

TRANSACTION 0 677833454, ACTIVE 0 sec, process no 11397, OS thread id 344086 updating or deleting, thread declared inside InnoDB 499

mysql tables in use 1, locked 1

3 lock struct(s), heap size 320, undo log entries 1

MySQL thread id 84, query id 162348739 dcnet03 dcnet Updating

update TSK_TASK set STATUS_ID=1067,UPDATE_TIME=now () where ID in (9921180)

*** (2) HOLDS THE LOCK(S):

RECORD LOCKS space id 0 page no 849384 n bits 208 index `PRIMARY` of table `dcnet_db/TSK_TASK` trx id 0 677833454 lock_mode X locks rec but not gap

Record lock, heap no 92 PHYSICAL RECORD: n_fields 11; compact format; info bits 0

0: len 8; hex 800000000097629c; asc b ;; 1: len 6; hex 00002866eaee; asc (f ;; 2: len 7; hex 00000d40040110; asc @ ;; 3: len 8; hex 80000000000050b2; asc P ;; 4: len 8; hex 800000000000502a; asc P*;; 5: len 8; hex 8000000000005426; asc T&;; 6: len 8; hex 800012412c66d29c; asc A,f ;; 7: len 23; hex 75706c6f6164666972652e636f6d2f6 8616e642e706870; asc uploadfire.com/hand.php;; 8: len 8; hex 800000000000042b; asc +;; 9: len 4; hex 474bfa2b; asc GK +;; 10: len 8; hex 8000000000004e24; asc N$;;

*** (2) WAITING FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 0 page no 843102 n bits 600 index `KEY_TSKTASK_MONTIME2` of table `dcnet_db/TSK_TASK` trx id 0 677833454 lock_mode X locks rec but not gap waiting

Record lock, heap no 395 PHYSICAL RECORD: n_fields 3; compact format; info bits 0

0: len 8; hex 8000000000000425; asc %;; 1: len 8; hex 800012412c66d29c; asc A,f ;; 2: len 8; hex 800000000097629c; asc b ;;

*** WE ROLL BACK TRANSACTION (1)

此死锁问题涉及TSK_TASK表,该表用于保存系统监测任务,以下是相关字段及索引:

ID:主键;

MON_TIME:监测时间;

STATUS_ID:任务状态;

索引:KEY_TSKTASK_MONTIME2 (STATUS_ID, MON_TIME)。

标签:
0
投稿

猜你喜欢

  • 解决python执行不输出系统命令弹框的问题

    2022-10-01 10:25:02
  • 错误 2812: 未能找到存储过程 'master.dbo.xp_fileexist'

    2010-07-22 19:50:00
  • Python在Matplotlib图中显示中文字体的操作方法

    2023-03-30 00:29:54
  • Python实现识别文字中的省市区并绘图

    2021-10-11 08:14:52
  • 用注解编写创建表的SQL语句

    2024-01-14 01:51:11
  • Django基础之Model操作步骤(介绍)

    2022-04-12 12:17:50
  • 常见的python正则用法实例讲解

    2023-03-11 23:11:29
  • Django项目使用CircleCI的方法示例

    2022-10-17 11:43:24
  • WxPython界面利用pubsub如何实现多线程控制

    2021-01-28 08:10:03
  • Vue Router中应用中间件的方法

    2024-05-09 10:42:43
  • python的函数形参和返回值你了解吗

    2021-10-26 05:49:28
  • js给静态网页代码加密方法

    2007-08-04 19:48:00
  • WEB页面工具语言XML产生背景

    2008-05-29 10:52:00
  • ORACLE常见错误代码的分析与解决(三)

    2024-01-17 19:17:57
  • 详解Javascript 装载和执行

    2024-04-18 09:41:02
  • 详解MySQL主从复制及读写分离

    2024-01-21 12:27:14
  • Python给你的头像加上圣诞帽

    2023-08-28 11:30:41
  • list视图方式设计浅析

    2008-12-21 16:04:00
  • ASP.NET连接SQL数据库的简单实例代码

    2024-01-26 06:54:27
  • PHP xpath提取网页数据内容代码解析

    2024-06-05 15:39:35
  • asp之家 网络编程 m.aspxhome.com