ฉันพยายามดำเนินการ DDL บนโต๊ะและได้SHOW PROCESSLIST
รับข้อความ "กำลังรอการล็อกข้อมูลเมตาของตาราง"
จะทราบได้อย่างไรว่าธุรกรรมใดที่ยังไม่ปิด
ฉันใช้ MySQL v5.5.24
ฉันพยายามดำเนินการ DDL บนโต๊ะและได้SHOW PROCESSLIST
รับข้อความ "กำลังรอการล็อกข้อมูลเมตาของตาราง"
จะทราบได้อย่างไรว่าธุรกรรมใดที่ยังไม่ปิด
ฉันใช้ MySQL v5.5.24
คำตอบ:
SHOW ENGINE INNODB STATUS \G
มองหาส่วน -
TRANSACTIONS
เราสามารถใช้INFORMATION_SCHEMA Tables
แบบสอบถามที่เป็นประโยชน์
หากต้องการตรวจสอบเกี่ยวกับธุรกรรมการล็อกทั้งหมดที่รออยู่:
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
หากคุณไม่พบกระบวนการที่ล็อกโต๊ะ (เนื่องจากมันตายไปแล้ว) อาจเป็นเธรดที่ยังคงทำความสะอาดอยู่เช่นนี้
ส่วน TRANSACTION ของ
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;
ทำงานให้ฉัน
mysql 5.7 แสดงข้อมูลการล็อกข้อมูลเมตาผ่าน performance_schema.metadata_locks
ตาราง
เอกสารที่นี่
ฉันมีปัญหาคล้ายกันกับ Datagrip และวิธีแก้ปัญหาเหล่านี้ไม่ได้ผล
เมื่อฉันรีสตาร์ทไคลเอ็นต์ Datagrip มันก็ไม่มีปัญหาอีกต่อไปและฉันสามารถวางตารางได้อีกครั้ง
INFORMATION_SCHEMA
ฐานข้อมูล