码迷,mamicode.com
首页 > 其他好文 > 详细

from='1'这个条件,在idx_from上发生了互斥。

时间:2020-07-10 00:27:44      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:思路   ted   app   nsa   trace   read   task   命中   adl   

  • 两条SQL命中的记录各三条。一看是死锁,第一反应是发生记录资源互斥等待。猜想会不会是这6行记录在执行update的时候SQL1和SQL2修改的记录发生了互斥

菜瓜:所以你最开始想的是更新时两条SQL获取记录的顺序反了,譬如说SQL1先拿35610742,再拿35610744前,SQL2先把35610744拿到了且它要拿35610742在阻塞

水稻:是的,但是很快发现这个思路很离谱,我们说锁的时候应该是和索引联系起来,分析记录就有点偏了。而且按记录来看,两个SQL命中的记录都不一样。于是回到索引上,就能说通他们都命中了from=‘1‘这个条件,在idx_from上发生了互斥。

菜瓜:soga,真实情况呢

水稻:事情如果这么简单我就不会研究它好几天了。分析完了之后开始准备复现死锁。思路很简单,因为SQL只有一句,要模拟出来就用多线程并发执行

  • Java Code
    • 技术图片
          @Resource
          private DeadlockMapper deadlockMapper;
      
          @Resource
          ThreadPoolTaskExecutor threadPoolTaskExecutor;
      
          @Test
          public void deadlock() {
              for (; ; ) {
                  threadPoolTaskExecutor.execute(() -> {
                      try {
                          Long id = 35611183L;
                          String from = "1";
                          String to = "2";
                          deadlockMapper.updateDeadlock(id, from, to);
                      } catch (Exception e) {
                          System.out.println("transaction tututu");
                          e.printStackTrace();
                          System.exit(0);
                      }
                  });
                  threadPoolTaskExecutor.execute(() -> {
                      try {
                          Long id = 35610745L;
                          String from = "1";
                          String to = "c";
                          deadlockMapper.updateDeadlock(id, from, to);
                      } catch (Exception e) {
                          System.out.println("transaction kakaka");
                          e.printStackTrace();
                          System.exit(0);
                      }
                  });
                  System.out.println("once loop finish ...");
              }
          }
    •  

from='1'这个条件,在idx_from上发生了互斥。

标签:思路   ted   app   nsa   trace   read   task   命中   adl   

原文地址:https://www.cnblogs.com/newvdgh/p/13276927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!