V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
? MySQL 5.5 Community Server
? MySQL 5.6 Community Server
? Percona Configuration Wizard
? XtraBackup 搭建主从复制
Great Sites on MySQL
? Percona
? MySQL Performance Blog
? Severalnines
推荐管理工具
? Sequel Pro
? phpMyAdmin
推荐书目
? MySQL Cookbook
MySQL 相关项目
? MariaDB
? Drizzle
参考文档
? http://mysql-python.sourceforge.net/MySQLdb.html
vemier
V2EX  ?  MySQL

为什么跑集成测试时会出现 mysql 死锁

  •  
  •   vemier · 2020-08-06 23:04:40 +08:00 · 2146 次点击
    这是一个创建于 1357 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个加了事务的方法,先是 deleteById,然后再 insertById,这两个方法的 id 是同一个 id

    通过接口调用没有问题,用 maven 跑集成测试就死锁了,通过 SELECT * FROM sys.innodb_lock_waits 可以看到 insertById 被 deleteById block 住了,去掉事务的话集成测试就可以跑过去,为啥会这样...
    5 条回复  ?  2020-08-07 17:44:34 +08:00
    AngryPanda
        1
    AngryPanda  
       2020-08-07 09:26:24 +08:00 via Android
    insertById 是什么鬼?先有 id 再 insert ?
    wakzz
        2
    wakzz  
       2020-08-07 16:09:28 +08:00
    mysql 的行锁,一个事务写一条记录未提交,该记录锁住,所以另一个事务无法写该记录。
    vemier
        3
    vemier  
    OP
       2020-08-07 17:13:59 +08:00
    @AngryPanda 写错了,是 insert(aId,bId)
    vemier
        4
    vemier  
    OP
       2020-08-07 17:19:22 +08:00
    failsafe 插件配置<reuseForks>false</reuseForks><forkCount>1</forkCount>就可以了
    vemier
        5
    vemier  
    OP
       2020-08-07 17:44:34 +08:00
    @wakzz 这些方法都在一个事务里的。不清楚 failsafe 的这个 fork 机制做了什么东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5433 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:03 · PVG 17:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com