小智..
64
看看您的数据库是否经过微调.特别是交易隔离.增加innodb_lock_wait_timeout变量不是一个好主意.
检查mysql cli中的数据库事务隔离级别:
mysql> SELECT @@GLOBAL.transaction_isolation, @@transaction_isolation, @@session.transaction_isolation;
+-----------------------+-----------------+------------------------+
| @@GLOBAL.tx_isolation | @@tx_isolation | @@session.tx_isolation |
+-----------------------+-----------------+------------------------+
| REPEATABLE-READ | REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+------------------------+
1 row in set (0.00 sec)
您可以获得改进de隔离级别的改进,使用像READ COMMITTED这样的oracle而不是REPEATABLE READ(InnoDB Defaults)
mysql> SET tx_isolation = 'READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL tx_isolation = 'READ-COMMITTED';
Query OK, 0 rows affected (0.00 sec)
mysql>
另外,如果必要,请尝试使用SELECT FOR UPDATE.
对我来说很有用,my.cnf版本是[mysqld] transaction-isolation = READ-COMMITTED (2认同)