36

we are running java application, running for ages, back end is MySQL, recently updated to MySQL 5.6. Everything was running fine, past week started getting this error:

Lock wait timeout exceeded; try restarting transaction

which looks like never stop ending. I don't know what to do with this error to stop.

Why is it occurring all of sudden?

Ronaldo
  • 6,017
  • 2
  • 13
  • 43
JAVAC
  • 471
  • 1
  • 4
  • 6

2 Answers2

44

You can set variable innodb_lock_wait_timeout=100 for lock time to 100 sec.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

The transaction which is timeout, try to lock table which is hold by another process. and your timeout variable set with little number of second. so it shows error. You can see more status by the command.

SHOW ENGINE INNODB STATUS\G 

You can see list of locked tables by-

 show open tables where in_use>0;

Now see the thread which is using this table

  show full processlist;

now you can kill that thread or wait to complete it.

Laurenz Albe
  • 61,070
  • 4
  • 55
  • 90
Hitesh Mundra
  • 811
  • 8
  • 7
0

If using MySQL version less than 5.0 you cannot change the variable even for the session or global scope. The best solution is to capture the query and execute it after the traffic is slow.