美文网首页并发编程
某网站高并发登陆死锁问题

某网站高并发登陆死锁问题

作者: Jandison | 来源:发表于2016-05-27 11:39 被阅读321次

下面是通过错误日志捕捉到的死锁SQL:

150922 18:12:49

事务1

update g_taskinfo set tislocked=1,tlockperson=13406 where tobjnum2 = 94064033  and tislocked = 0

使用到idx_tobjnum2_ttape索引(非主键索引)

事务2

update g_taskinfo set finishtime='2015-09-22 18:12:28', tstatus=20 where id=471791 (使用到主键索引)

事务1 update操作过程

1、由于使用了非主键索引,首先需要获取idx_tobjnum2_ttape上的行级锁

2、紧接着根据主键进行更新,所以需要获取主键上的行级锁

3、更新完毕后,提交,并释放所有锁(MySQL锁一次性释放)

死锁产生原因:

高并发场景下,事务1的步骤1执行完后,锁住了非主键索引,然后去请求主键索引,此时在执行完步骤1后,进入步骤2之前突然进来事务2,事务2会锁住主键索引,然后去请求非主键索引idx_tobjnum2_ttape。

由于事务2获取了主键索引,在等待idx_tobjnum2_ttape上的锁。

事务1获取了idx_tobjnum2_ttape锁,等待主键索引上的锁。

死锁发生。

解决方法:将事务1的非主键索引,修改为通过主键逐一操作

相关文章

  • 某网站高并发登陆死锁问题

    下面是通过错误日志捕捉到的死锁SQL: 150922 18:12:49 事务1 update g_taskinfo...

  • Java高并发 -- 并发扩展

    Java高并发 -- 并发扩展 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 死锁 死锁是指...

  • 死锁避免

    操作系统中不可避免的一个问题就是死锁,如今的系统都是高并发,多进程(线程)并行的,所以死锁问题也就不可避免的会发生...

  • 7.高并发大流量

    php如何解决网站大流量,高并发的问题? 考点 高并发架构相关概念 高并发:通常是指并发访问,也就是在某个时间点,...

  • 死锁问题和并发问题

    如果没有锁就不存在死锁问题。 因此死锁问题是并发问题的衍生问题,因为要解决并发问题,就设计了锁这个解决方案,因为要...

  • Java Concurrent 死锁

    前言 死锁是一个比较大的概念,在并发场景下的加锁行为都有可能产生死锁问题。在Java 并发编程中会有死锁,操作系统...

  • 网站的性能优化概述

    网站的性能问题很多是在用户高并发访问时产生的,所以网站性能优化的主要工作就是改善高并发用户访问情况下的网站响应速度...

  • face 29高并发大流量

    高并发大流量 并发 并发访问,在某个时间点 有多少个访问同时到来 php如何处理网站大流量高并发问题 流量优化 防...

  • 分布式

    每秒处理10万高并发订单的某集团支付系统架构分享分布式系统中的死锁处理分布式系统常用技术栈 nginx, rpc,...

  • 2022-11-17 08多线程

    GCD 同步串行 死锁!,会导致队列引起循环等待 没有问题 同步并发 答案:12345 产生死锁 异步串行 异步并...

网友评论

本文标题:某网站高并发登陆死锁问题

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