› 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 · Aug 6, 2020 · 3324 views
    This topic created in 2246 days ago, the information mentioned may be changed or developed.
    有一个加了事务的方法,先是 deleteById,然后再 insertById,这两个方法的 id 是同一个 id

    通过接口调用没有问题,用 maven 跑集成测试就死锁了,通过 SELECT * FROM sys.innodb_lock_waits 可以看到 insertById 被 deleteById block 住了,去掉事务的话集成测试就可以跑过去,为啥会这样...
    5 replies  •  2020-08-07 17:44:34 +08:00
    AngryPanda
        1
    AngryPanda  
       Aug 7, 2020 via Android
    insertById 是什么鬼?先有 id 再 insert ?
    wakzz
        2
    wakzz  
       Aug 7, 2020
    mysql 的行锁,一个事务写一条记录未提交,该记录锁住,所以另一个事务无法写该记录。
    vemier
        3
    vemier  
    OP
       Aug 7, 2020
    @AngryPanda 写错了,是 insert(aId,bId)
    vemier
        4
    vemier  
    OP
       Aug 7, 2020
    failsafe 插件配置<reuseForks>false</reuseForks><forkCount>1</forkCount>就可以了
    vemier
        5
    vemier  
    OP
       Aug 7, 2020
    @wakzz 这些方法都在一个事务里的。不清楚 failsafe 的这个 fork 机制做了什么东西。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   813 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:54 · PVG 05:54 · LAX 14:54 · JFK 17:54
    ♥ Do have faith in what you're doing.