美文网首页
MySQL UPDATE 死锁分析

MySQL UPDATE 死锁分析

作者: baboon | 来源:发表于2016-03-15 11:28 被阅读662次

Table

CREATE TABLE `user_item` (
  `id` BIGINT(20) NOT NULL,
  `user_id` BIGINT(20) NOT NULL,
  `item_id` BIGINT(20) NOT NULL,
  `status` TINYINT(4) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_user_item_id` (`user_id`,`item_id`,`status`)
) ENGINE=INNODB DEFAULT 

Update

update user_item set status=1 where user_id=xxx and item_id=xxx

Analyse

innodb update语句会执行以下步骤:

1、非主键索引idx_user_item_id 上锁(行级锁)
2、PK 上锁(行级锁); 
     根据主键进行更新,所以需要获取主键上的行级锁;
3、更新完毕后,提交,并释放所有锁。

若1,2步骤之间有类似语句 update user_item set status=1 where id=xxx and user_id=xxx 则会造成死锁。即先锁了PK,再去锁idx_user_item_id。

Conclusion

update 先锁主键PK,然后再操作。

相关文章

  • MySQL UPDATE 死锁分析

    Table Update Analyse innodb update语句会执行以下步骤: 若1,2步骤之间有类似语...

  • mysql for update 死锁问题

    在RR条件, id是主键,插入五条数据 我们可以发现 针对事务一:select * from user where...

  • 经典问题处理记录

    1.mysql update操作死锁问题 故障描述 日志监控发现少量数据库死锁异常 问题原因 设计方案使用悲观锁s...

  • 一则由于索引导致的MySQL死锁分析

    涉及死锁的 authorized_user 表的 DDL 死锁日志 根据 MySQL 日志分析出来的涉及死锁的 S...

  • MYSQL死锁(insert&update)

    错误信息 问题代码A 参考资料 http://www.cnblogs.com/crazylqy/p/7689447...

  • Mysql死锁分析

    事务1: UPDATE vh_product_price SET update_time=now(),update...

  • MySQL死锁分析

    一、表结构,死锁日志,事务隔离级别 表结构: 死锁日志: 事务隔离级别为读已提交。 二、insert on dup...

  • MySQL死锁分析

    死锁场景1:并发插入重复key 场景重现 表结构如下: 三个session按顺序执行下面的操作 Session 1...

  • MySQL死锁分析

    什么是死锁 MySQL的死锁指的是两个事务互相等待的场景,这种循环等待理论上不会有尽头。比如事务A持有行1的锁,事...

  • Mysql中update后insert造成死锁的分析

    问题描述 sql如下: 其中id为主键。平均一天有不到10次的死锁。 排查过程 首先查看程序日志,发现死锁都只有新...

网友评论

      本文标题:MySQL UPDATE 死锁分析

      本文链接:https://www.haomeiwen.com/subject/iotqlttx.html