Home > Database > Mysql Tutorial > How to Troubleshoot MySQL's 'Lock wait timeout exceeded' Error?

How to Troubleshoot MySQL's 'Lock wait timeout exceeded' Error?

Susan Sarandon
Release: 2025-01-03 14:42:41
Original
987 people have browsed it

How to Troubleshoot MySQL's

How to debug Lock wait timeout exceeded on MySQL?

When a query attempts to access a database and encounters a lock, it may result in the Lock wait timeout exceeded error in the MySQL error logs. While you may know which query is trying to access the database, determining which query has the lock at that exact moment is not immediately clear.

The key to finding the culprit is the mention of "transaction" in the error statement. This indicates that the query is trying to modify at least one row in one or more InnoDB tables.

Since you have identified the query, the next step is to run the SHOW ENGINE INNODB STATUSG command to view the affected tables. This command will provide you with detailed information about the locks and mutexes involved in the query.

For example, consider the following output from the SHOW ENGINE INNODB STATUSG command:

mysql> show engine innodb status\G
...
Per second averages calculated from the last 4 seconds
----------
SEMAPHORES
----------
...
14 lock struct(s), heap size 3024, 8 row lock(s), undo log entries 1
...
---------------
LATEST FOREIGN KEY ERROR
---------------
...
DELETE FROM file WHERE file_id in ('6dbafa39-7f00-0001-51f2-412a450be5cc' )
...
Copy after login

In this output, we can see that there are 8 row locks, indicating that a write operation is being performed on 8 rows in the file table. The DELETE statement provided in the output confirms that a deletion operation is being attempted.

To resolve this issue, you can increase the innodb_lock_wait_timeout value, which defines the maximum amount of time a transaction can wait for a lock before timing out. The default value for this setting is 50 seconds. You can adjust this value to a higher number, such as 120 seconds, to give the transaction more time to complete.

To set the innodb_lock_wait_timeout value permanently, add the following line to your /etc/my.cnf file:

[mysqld]
innodb_lock_wait_timeout=120
Copy after login

Restart MySQL to apply the changes. Alternatively, you can temporarily modify the innodb_lock_wait_timeout value for the current session using the following command:

SET GLOBAL innodb_lock_wait_timeout = 120;
Copy after login

This will allow you to run your query without encountering the Lock wait timeout exceeded error.

The above is the detailed content of How to Troubleshoot MySQL's 'Lock wait timeout exceeded' Error?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template