- 论坛徽章:
- 0
|
遇到一个情况,一个sequence_table,调用nextval,currval函数更新,sequence_table中有多行,连续出现几次lock_wait的情况,kill sessionid后,还是会一直出现lock_wait,怀疑是有没有提交的事务存在。但是show processlist没有看到。select * from information_schema.innodb_trx也没有看到!
表结构:
CREATE TABLE `sequence_tab` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT '1',
`seq_total_length` int(11) DEFAULT '0',
`Lpad_char` varchar(1) DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=innodb;
表的内容:
mysql> select * from sequence_tab;
+------------------------------------+---------------+-----------+------------------+-----------+
| name | current_value | increment | seq_total_length | Lpad_char |
+------------------------------------+---------------+-----------+------------------+-----------+
| alarmrosterSeq | 1 | 1 | 8 | 0 |
| alarm_info_id | 2325190 | 1 | NULL | |
| bs_id_seq | 1910 | 1 | 8 | 0 |
| bw_id_seq | 996 | 1 | 8 | 0 |
已经排除的手段:
1,程序侧没有对transaction做控制,MYSQL设置也是auto_commit;
2,模拟将sequence_tab表和用到的几个函数setval,currval,nextval导到测试MYSQL中测试了一下。
并发30个mysql会话执行同一个存储过程,不断的获取currval,nextval的值插入到新的表test1中。总共插入了1KW行的数据。
测试中:会出现lock_wait的情况,但是出现的时间很短。
后面不知道如何诊断了,请各位大拿提供宝贵的建议,谢谢!
|
|