मैं एक मेज पर कुछ DDL प्रदर्शन करने की कोशिश कर रहा हूं और SHOW PROCESSLIST"तालिका मेटाडेटा लॉक की प्रतीक्षा कर रहा है" संदेश में परिणाम।
मैं कैसे पता लगा सकता हूं कि कौन सा लेनदेन अभी तक बंद नहीं हुआ है?
मैं MySQL v5.5.24 का उपयोग कर रहा हूं।
जवाबों:
SHOW ENGINE INNODB STATUS \G
अनुभाग के लिए देखो -
TRANSACTIONS
हम INFORMATION_SCHEMA टेबल्स का उपयोग कर सकते हैं ।
उपयोगी प्रश्न
सभी तालों के लेनदेन के बारे में जाँच करने के लिए:
USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;
अवरुद्ध लेनदेन की एक सूची:
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
या
SELECT INNODB_LOCKS.*
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
किसी विशेष टेबल पर ताले की सूची:
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
ताले की प्रतीक्षा में लेनदेन की सूची:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
संदर्भ - MySQL समस्या निवारण: क्या करें जब प्रश्न काम न करें , अध्याय 6 - पृष्ठ 96।
यदि आपको तालिका को लॉक करने की प्रक्रिया नहीं मिल रही है (क्योंकि यह मृत है), तो यह इस तरह से सफाई करने वाला एक धागा हो सकता है
का अनुभाग परिवहन
show engine innodb status;
अतं मै
---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
जैसा कि स्पष्ट लेनदेन गतिरोध में एक टिप्पणी में उल्लेख किया गया है ?
आप सीधे लेनदेन धागे को मारने की कोशिश कर सकते हैं, यहां
KILL 5208136;
मेरे लिए काम किया।
मेरे पास Datagrip के साथ एक समान मुद्दा था और इनमें से किसी भी समाधान ने काम नहीं किया।
एक बार जब मैंने डेटाग्रिप क्लाइंट को फिर से शुरू किया तो यह अब मुद्दा नहीं था और मैं फिर से टेबल छोड़ सकता था।
INFORMATION_SCHEMAडेटाबेस में हैं।