How do I find which transaction is causing a "Waiting for table metadata lock" state?

query to check the recent blocking history
simple query to check the recent blocking history
how to find blocking query in sql server
dbcc opentran
how to avoid blocking in sql server
sql server blocked process report
sql server blocking script
sql server locks query

I am trying to perform some DDL on a table and SHOW PROCESSLIST results in a " Waiting for table metadata lock " message.

How can I find out which transaction is not yet closed?

I'm using MySQL v5.5.24.


SHOW ENGINE INNODB STATUS \G

Look for the Section -

TRANSACTIONS

We can use INFORMATION_SCHEMA Tables.

Useful Queries

To check about all the locks transactions are waiting for:

USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;

A list of blocking transactions:

SELECT * 
FROM INNODB_LOCKS 
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);

OR

SELECT INNODB_LOCKS.* 
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
  ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);

A List of locks on particular table:

SELECT * FROM INNODB_LOCKS 
WHERE LOCK_TABLE = db_name.table_name;

A list of transactions waiting for locks:

SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';

Reference - MySQL Troubleshooting: What To Do When Queries Don't Work, Chapter 6 - Page 96.

The Cause of Every Deadlock in SQL Server, How do you fix a transaction log for a database is full? I have a database of 20 GB which insists in having its transaction log over 7GB. when I used this script to find out the size of the biggest objects in that database, I see they are relatively small. I have been using the default trace to see when this transaction log has been autogrown, but I found none.


If you cannot find the process locking the table (cause it is alreay dead), it may be a thread still cleaning up like this

section TRANSACTION of

show engine innodb status;

at the end

---TRANSACTION 1135701157, ACTIVE 6768 sec
MySQL thread id 5208136, OS thread handle 0x7f2982e91700, query id 882213399 xxxIPxxx 82.235.36.49 my_user cleaning up

as mentionned in a comment in Clear transaction deadlock?

you can try killing the transaction thread directly, here with

 KILL 5208136;

worked for me.

Help! My SQL Server Log File is too big!!!, happens when two (or more) transactions block each other by holding locks on resources that each of the transactions also need. For example: Transaction 1 holds a lock on Table A. Is there for instance a way to check something like getCurrentTransaction().isRollbackOnly()? – like this I could step through the method and find the cause. Answers: When you mark your method as @Transactional , occurrence of any exception inside your method will mark the surrounding TX as roll-back only (even if you catch them).


mysql 5.7 exposes metadata lock information through the performance_schema.metadata_locks table.

Documentation here

Data Concurrency and Consistency, Yes, MySQL seems to automatically start a transaction in this case: Suppose that you are running in the default REPEATABLE READ isolation level. When you  Basically I have a burst of transaction log files that are timestamped 5 days ago. I expect that this means that something was started 5 days ago and its transaction is still active. How do I debug this issue? All the hints I can find are about increasing the log size, but in this case it would just be a band aid


I had a similar issue with Datagrip and none of these solutions worked.

Once I restarted the Datagrip Client it was no longer an issue and I could drop tables again.

MySQL, Try this extended event (change the filename path accordingly). I've used it in the past to help me track down what was causing unexpected growth in my data  The issue you're encountering is to do with what transaction is wrapped. The code snippet you've provided is setting a single transaction for all 50 mill row update. This will cause the transaction log to keep growing to cater for all the update until table 1 & 2 are completed even when you're only updating 1000 rows at a time.


how to identify the transactions that are causing the transaction log , Isolation – a transaction that is in process of execution and is not committed yet, must be isolated from all other transactions; Durability –  Call your bank's 800 number and select the option to speak with a representative. Ask for full details about the debit card transaction. Give the amount and date that it hit your account. You will receive the company name, transaction ID and phone number.


Techniques to identify blocking queries and other causes of SQL , An application that allows for user interaction inside transactions. This causes the transaction to remain open for a long time, and this causes  QB not finding transactions to match with banking when they are in QB Hi there, @somar4u . I'm here to help share additional inputs to the steps and information provided by my colleague, Alessandra_B to get this taken care of today.


A transaction log grows unexpectedly or becomes full in SQL Server, POSTINVENTORY TRANSACTION. Any transaction, causing an increase or decrease to the accountable stock record balance, dated after the established  The transaction log stopped growing so fast and I didn't see this procedure in the open transactions from the above code. So this simple stored procedure that worked fine suddenly caused a major production issue causing the application to shut down and the fix was as simple as a recompile.