I have got the error "Lock wait timeout exceeded; try restarting transaction".What are the reason for this and how to solve the problem?FYI: innodb_lock_wait_timeout = 100 in Mysql config file.
A:
Is this happening on a high-trafficked system where transactions take a long time (i.e. tables are locked for a long time)? If so, you might want to look into your transaction code to make them shorter / more granular / more performant.
Alex
2010-01-20 08:18:21
A:
This is problem of lock contention, which ultimately result in a time-out on one of the lock. Here are a few suggestions:
- Make sure you have the correct indexes which result in row-level locks not table-level lock. This will reduce the contention.
- Make sure you have indexes on the foreign key constraints. To check the relational constraints during
insert
orupdate
, some database lock the whole referenced table if there is no such index (don't know if this is the case of MySQL) - If problem is still here, try to make the transaction faster/smaller. Again, this will reduce the contention on the database.
- Increase the timeout but keep the value reasonable
ewernli
2010-01-20 08:26:36