ดูว่าฐานข้อมูลของคุณได้รับการปรับแต่งหรือไม่ โดยเฉพาะการแยกธุรกรรม ไม่ใช่ความคิดที่ดีที่จะเพิ่มตัวแปร 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)
คุณสามารถได้รับการปรับปรุงการเปลี่ยนระดับการแยกใช้ oracle เช่น READ COMMITTED แทน REPEATABLE READ (ค่าปริยายของ InnoDB)
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 เฉพาะในกรณีที่จำเป็นเท่านั้น