数据库服务器ip 10.0.1.3发现有deadlock . show innodb status 部分信息如下ip 10.0.1.1
MySQL thread id 34501, query id 1170219884 prod2a 192.168.10.15 betbrain update
INSERT INTO Out (id, aId, b,c,e,f,g,h,i,k,...) values (8081,5209319,a,47,2,3,null,null,null,4.0,null,'C','N','Y') ,(8082,5209319,a,47,2,4,null,null,null,4.0,null,'C','N','Y')
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 345492 n bits 232 index `PRIMARY` of table `db/Out` trx id 0 412100899 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
ip 10.0.1.2
MySQL thread id 34533, query id 1170219891 prod2b 192.168.10.25 betbrain update
INSERT INTO Out (id, aId, b,c,e,f,g,h,i,k,...) values (8083,5209320,a,43,1,1,27330,null,null,null,null,'C','N','Y') ,(8084,5209320,a,43,1,1,27357,null,null,null,null,'C','N','Y')
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 345492 n bits 232 index `PRIMARY` of table `db/Out` trx id 0 412100900 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0请问insert 产生的是行级还是表级别的表
MySQL thread id 34501, query id 1170219884 prod2a 192.168.10.15 betbrain update
INSERT INTO Out (id, aId, b,c,e,f,g,h,i,k,...) values (8081,5209319,a,47,2,3,null,null,null,4.0,null,'C','N','Y') ,(8082,5209319,a,47,2,4,null,null,null,4.0,null,'C','N','Y')
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 345492 n bits 232 index `PRIMARY` of table `db/Out` trx id 0 412100899 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0
ip 10.0.1.2
MySQL thread id 34533, query id 1170219891 prod2b 192.168.10.25 betbrain update
INSERT INTO Out (id, aId, b,c,e,f,g,h,i,k,...) values (8083,5209320,a,43,1,1,27330,null,null,null,null,'C','N','Y') ,(8084,5209320,a,43,1,1,27357,null,null,null,null,'C','N','Y')
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 0 page no 345492 n bits 232 index `PRIMARY` of table `db/Out` trx id 0 412100900 lock_mode X
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0请问insert 产生的是行级还是表级别的表
解决方案 »
- 我的sql语句写错了么?怎么删除不了数据库的信息。。。
- sql 安装问题
- mysql里如何得到格林时间 ?
- ZConnection 连接MYSQL5.0为什么不能连接,说找不到数据库驱动.可是我用了那个ZEOSDBO-6.6.0-beta,那里面有一个libmysqld50.dll,为什么不能用呢?
- postgresql中存储过程怎么写???????????????????????
- mysql 4.0.26安装小问题,求救
- java备份msyql数据库
- 一个简单的问题
- 用vc连接mysql出现的问题
- 数据表进行插入操作的时候 会报重复主键@@
- 向ACMAIN_CHM、左左等高手请教,如何设置MySQL Workbench?
- postgres存储数据时,出现问题
(发生deadlock后 innodb 一般都能自动检查到 并使得一个事务释放lock并回退
另外一个事物获得lock 继续 执行事 所以上面数据并没有丢失
但现在上面表55万记录 涉及外部lock 或者表级别lock innodb不能完全自动检查到死锁所以楼上请详细说明为什么insert 是行级别锁>>
)还是想继续问下
web机器1
8081,5209319
8082,5209319
...............web机器2
8083,5209320
8084,5209320
这个deadlock到底如何产生的 该表pk 为 id, aId 字段
上面例如8081,5209319就是主键
数据库的死锁一般是 系统争用资源时候资源有限一部分事务被锁住而让别的事务占用有限的资源,你的描述情况没有这个情况,2台web,不同的数据库服务器,争啥争啊?楼主多描述下,一台web数据库服务器上面你死锁的时候都有哪些别的事务在运行呢?
2 没听说过mysql有锁升级的概念
现在发现丢失数据发现死锁的时候
web机器1
8081,5209319
8082,5209319
这边的数据正常会插入...............web机器2
8083,5209320
8084,5209320 如果死锁 这边数据将丢失原理在于
发生deadlock后 innodb 一般都能自动检查到 并使得一个事务释放lock并回退
另外一个事物获得lock 继续 执行事. 这样只能保证一边数据不丢失问该如何让数据不丢?
这个表 的pk (id,mesId) 2个字段是否是cluster的速度有问题.我思考把pk()------>唯一性索引 不知道能否解决问题
1 是non cluster unique
2 是cluster unique
不知道选择哪1个
)
死锁更严重了。1小时至少1个 而且每个不一样的 表和数据 。 以前没有统计有多少 但至少不像这么频繁
在测试库发现倒不是很明显 对于死锁问题的解决
死锁 的 时候 经常出现这个 。很头疼 。我的版本 5。1。49 在线其他 机器 都是准确的 索引名字。 唯独这个 版本出现 index "GEN_CLUST_INDEX" of(1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 0 page no 311608 n bits 336 index `GEN_CLUST_INDEX` of table `db`.`Ehistory` trx id 0 791965586 lock_mode X locks rec but not gap waiting
Record lock, heap no 128 PHYSICAL RECORD: n_fields 10; compact format; info bits 0
0: len 6; hex 00000c937a43; asc zC;; 1: len 6; hex 00002f346f88; asc /4o ;; 2: len 7; hex 000003c0830b99; asc ;; 3: len 8; hex 000000000b1efd8e; asc ;; 4: len 8; hex 000000000000d9df; asc ;; 5: len 1; hex 83; asc ;; 6: len 8; hex 0000000001eadd7c; asc |;; 7: len 1; hex 44; asc D;; 8: len 1; hex 59; asc Y;; 9: len 1; hex 59; asc Y;;*** (2) TRANSACTION:
TRANSACTION 0 791965576, ACTIVE 0 sec, process no 7209, OS thread id 1097619776 fetching rows, thread declared inside InnoDB 118
mysql tables in use 1, locked 1
126 lock struct(s), heap size 30704, 552 row lock(s), undo log entries 275
MySQL thread id 140525, query id 1398512707 10.0.1.103 betbrain Updating
update E
GEN_CLUST_INDEX" 这个索引名字是该表灭有的俄 什么错误?
2. 如果对查询的结果有疑问,可以用explain来分析下查询语句的走向,就能清楚语句执行的前前后后。
坚持技术,还是需要朋友间的多多交流的, 提问是好事情的"GEN_CLUST_INDEX" 这感觉是gap lock 他锁定一个范围 (确实没有表级别锁)
现在不知道1 这个产生的原因 2 如何解决 这个问题
当你的表没有主索引的时候,MYSQL会自动创建一个隐藏的索引。你看到的GEN_CLUST_INDEX就是默认主键索引的名称。
《高性能MYSQL》关于EXPLAIN的那一节有说明。
总是提示这个错误 ndex `uniq_Outis表 这个是那个表的唯一性索引 (修改前是pk(id+mesid)
现在是uniq_Outi>唯一性索引(id+mesid)
)但可惜没有明显的改善
原来是 2台web 同时写入数据到 数据库服务器. 发生deadlock如果用ejb.(单独开一台组件服务器 )
2台web 分别条用 ejb所在的服务器. 通过ejb 去写入数据到数据库服务器
这样ejb(com里面自动会对请求进行放一个序列 )
按道理可以避免 上面得 2台web 同时写入数据到 数据库服务器的问题 ?
(ejb类似com调试不方便 开发麻烦等缺点 )