事务等待InnoDB Lock永远等待

时间:2015-02-25 14:35:27

标签: mysql timeout locking innodb

我正在使用innoDB块,我正在尝试模拟我在生产服务器中遇到的问题。尝试在MYSQL中的“事务”表中插入行时。

我使用此命令锁定了表:

LOCK TABLES transaction AS tran WRITE;

之后我从我的网络应用程序创建了一个事务,该事务被锁定阻止。问题是此事务永远被阻止。

我可以通过运行此命令在MYSQL中看到它:

show full processlist;

就在那里。

我将MYSQL变量 innodb_lock_wait_timeout 更改为10秒但从未失败。

这是流程列表中的响应:

Waiting for table metadata lock

提前感谢!

1 个答案:

答案 0 :(得分:0)

  

之后我尝试从我的网络应用程序创建一个事务,并且   锁保持阻止事务。问题是这个   交易永远被阻止。

请出示您的密码:锁定并插入

LOCK TABLES and UNLOCK TABLES Syntax

  

LOCK TABLES显式获取当前客户端的表锁   会话。可以为基表或(从MySQL获取)表锁   5.0.6)观点。您必须具有LOCK TABLES权限和SELECT   要锁定的每个对象的权限。明确解锁表格   释放当前会话持有的任何表锁。锁表   隐式释放之前当前会话持有的任何表锁   获得新锁。

     

UNLOCK TABLES的另一个用途是释放全局读锁   使用FLUSH TABLES WITH READ LOCK语句获取,该语句启用   您可以锁定所有数据库中的所有表。

     

表锁只能防止不适当的读取或写入   其他会议。持有锁的会话,甚至是读锁,都可以   执行表级操作,例如DROP TABLE。截断操作   不是事务安全的,因此如果会话尝试,则会发生错误   一个在活动交易期间或持有表锁时。

您看到Configurable InnoDB Auto-Increment Locking了吗 innodb_autoinc_lock_mode?

mysql> UNLOCK TABLES;
        Query OK, 0 rows affected (0.00 sec)

mysql> DELETE  FROM `shop`;
Query OK, 1 row affected (0.00 sec)

mysql> LOCK TABLES shop AS tran WRITE READ;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO shop AS tran VALUES (1,'A',3.45);
        ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS tran VALUES (1,'A',3.45)' at line 1
Imysql> INSERT INTO tran VALUES (1,'A',3.45);
        ERROR 1100 (HY000): Table 'tran' was not locked with LOCK TABLES
mysql> INSERT INTO shop  VALUES (1,'A',3.45);
        ERROR 1100 (HY000): Table 'shop' was not locked with LOCK TABLES
mysql>
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
D
mysql> DELETE  FROM `shop`;
Query OK, 0 rows affected (0.00 sec)