首页
注册
登录
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
广告
V2EX
›
MySQL
请教个 InnoDB deadlock 问题
fff333
·
2016-04-02 18:34:44 +08:00
via Android · 2723 次点击
这是一个创建于 3242 天前的主题,其中的信息可能已经有所发展或是发生改变。
表是 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
请问下,这种错误是因为什么?
Redis
update
innodb
deadlock
6 条回复
•
2016-04-03 11:59:28 +08:00
1
Mirana
2016-04-02 19:19:12 +08:00
还会有别的程序操作这个表吗
2
tabris17
2016-04-02 19:20:34 +08:00
你 update 的数据被其他的 connection 锁住了
3
yangdehua
2016-04-02 19:23:41 +08:00 via iPhone
执行 show engine innodb status\G 贴上来
4
fff333
OP
2016-04-02 20:26:21 +08:00 via Android
@
Mirana
没有 update ,会有别的地方 select
5
Mirana
2016-04-02 22:05:32 +08:00
@
fff333
事务有四个级别,设置成允许脏读看看
6
fff333
OP
2016-04-03 11:59:28 +08:00
@
Mirana
请教下,如果加了锁,还需要开 transaction 么?是不是 transaction 可以避免多线程 update 的时候有 Optimistic Lock Exception?
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
5588 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 27ms ·
UTC 08:08
·
PVG 16:08
·
LAX 00:08
·
JFK 03:08
Developed with
CodeLauncher
♥ Do have faith in what you're doing.