When a table is locked but SHOW PROCESSLIST shows nothing We had some slowness in our application. When I checked I figure out that one particular table was locked so all transactions were rejected by Lock wait timeout exceeded. When I did SHOW PROCESSLIST; I was expecting to see  some processes with Waiting for table level lock state but it shows nothing !? only some queries INSERT/UPDATE on the same table taking exactly 120 seconds before time-out and others processes on sleeping state (see picture):
The reason in my case was that one transaction is making a read-lock on a particular table leading to a &quot;Lock wait timeout exceeded&quot; because its not committed. So all other transactions are waiting to that particular tranx to do commit.
Now, why SHOW PROCESSLIST; show nothing ? In fact, it does.
you'll find it (the process) with a &quot;Sleep&quot; state and with no query shown in the info column like if it's just a regular connection to the database.
Let's check my example in the image :
In Blue, those are some very simple queries blocked (taking 120 second before a time-out) and the red one is the &quot;ghost&quot; or non-committed transaction.
To see those kind of transactions execute :
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX

And you may kill the process kill &lt;id&gt;; in which TRX_QUERY is null to free other transactions. In my case, KILL 33267342;
Make sure to check the non-committed transaction to see if a commit; or a Rollback clause is missing in order to ovoid such issues.