› 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
fff333
V2EX  ›  MySQL

请教个 InnoDB deadlock 问题

  •  
  •   fff333 · Apr 2, 2016 via Android · 3574 views
    This topic created in 3832 days ago, the information mentioned may be changed or developed.
    表是 InnoDB ,每次更新会 update 大约 200 多行。
    每次都开了事务基本的逻辑如下:
    1 获取 Redis lock
    2 得到锁后,开启 transaction
    3update 大概 200 列
    4 transaction commit
    5 释放 Redis lock
    返回结果给调用者

    用了 Redis 分布锁,所以不会出现 2 个 thread 同时开事务,同时 update 的情况。但是代码还是会报如下 exception :
    com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get
    请问下,这种错误是因为什么?
    6 replies  •  2016-04-03 11:59:28 +08:00
    Mirana
        1
    Mirana  
       Apr 2, 2016
    还会有别的程序操作这个表吗
    tabris17
        2
    tabris17  
       Apr 2, 2016
    你 update 的数据被其他的 connection 锁住了
    yangdehua
        3
    yangdehua  
       Apr 2, 2016 via iPhone
    执行 show engine innodb status\G 贴上来
    fff333
        4
    fff333  
    OP
       Apr 2, 2016 via Android
    @Mirana 没有 update ,会有别的地方 select
    Mirana
        5
    Mirana  
       Apr 2, 2016
    @fff333 事务有四个级别,设置成允许脏读看看
    fff333
        6
    fff333  
    OP
       Apr 3, 2016
    @Mirana 请教下,如果加了锁,还需要开 transaction 么?是不是 transaction 可以避免多线程 update 的时候有 Optimistic Lock Exception?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1074 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 18:02 · PVG 02:02 · LAX 11:02 · JFK 14:02
    ♥ Do have faith in what you're doing.