mysql 0x800000000000_[Mysql]记一次死锁问题的修复过程

本文介绍了在拣货系统中遇到的MySQL死锁问题,通过查看应用日志和MySQL状态,分析死锁快照,揭示了死锁的原因并提出了避免死锁的策略,包括保持事务操作顺序一致性和最小化事务范围。
摘要由CSDN通过智能技术生成

本文是以拣货系统的一次死锁错误为背景,介绍发现问题到解决问题的过程。

发现死锁问题

查看应用日志

发现有大量的error信息,仔细查看后发现大部分都是死锁错误。由于日志过多,之前的错误日志已经刷没了,但是可以通过mysql status查看最后一次死锁快照。

查看Mysql statis

status可以查看到MySQL服务的很多状态,如事务数、文件I/O、日志大小、缓存区等。我们重点关注“LATEST DETECTED DEADLOCK”部分,这部分记录了数据库的最后一次死锁发生的时间和事务快照。建议在发现死锁的时候打开“innodb_print_all_deadlocks”参数,记录所有死锁发生的情况。

(查看status.txt文件 SHOW ENGINE INNODB STATUS)

------------------------

LATEST DETECTED DEADLOCK

------------------------

171130 10:14:44

*** (1) TRANSACTION:

TRANSACTION 25AFDEA1, ACTIVE 0 sec starting index read

mysql tables in use 1, locked 1

LOCK WAIT 5 lock struct(s), heap size 1248, 3 row lock(s), undo log entries 1

MySQL thread id 23859938, OS thread handle 0x7f39202ec700, query id 1639722385 10.187.54.140 o2o_pick_good_rw Updating

UPDATE picking_list_53

SET pick_status = 4,picking_end_time = '2017-11-30 10:14:44',update_pin = 'system'

WHERE id = 54700

AND station_no = '11702453'

AND pick_status in (2,3)

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

RECORD LOCKS space id 2109 page no 767

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值