ฉันจะค้นหาธุรกรรมใดที่ทำให้เกิดสถานะ“ กำลังรอการล็อกข้อมูลเมตาของตาราง” ได้อย่างไร


99

ฉันพยายามดำเนินการ DDL บนโต๊ะและได้SHOW PROCESSLISTรับข้อความ "กำลังรอการล็อกข้อมูลเมตาของตาราง"

จะทราบได้อย่างไรว่าธุรกรรมใดที่ยังไม่ปิด

ฉันใช้ MySQL v5.5.24

คำตอบ:


153
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


17
โปรดทราบว่าตารางทั้งหมดที่อ้างถึงอยู่ในINFORMATION_SCHEMAฐานข้อมูล
Michael Mior

10
ตาราง InnoDB เหล่านี้เก็บข้อมูลเกี่ยวกับการล็อกข้อมูลเมตาจริงหรือไม่? โพสต์บล็อกนี้แนะนำเป็นอย่างอื่น: mysql.wisborg.dk/2014/01/13/…
Gareth

1
@Gareth: ใช้ได้จนถึง mysql -mysql-5-7-3- ขอบคุณสำหรับการอัปเดต
Joddy

12
ทั้งหมดนี้มีชุดว่าง ... แต่ยังคงมีการแสดงการล็อกในรายการกระบวนการ ...
K2xL

1
ตรวจสอบความคิดเห็นด้านล่างstackoverflow.com/a/36175882/362574
Joddy

52

หากคุณไม่พบกระบวนการที่ล็อกโต๊ะ (เนื่องจากมันตายไปแล้ว) อาจเป็นเธรดที่ยังคงทำความสะอาดอยู่เช่นนี้

ส่วน 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;

ทำงานให้ฉัน



6

ฉันมีปัญหาคล้ายกันกับ Datagrip และวิธีแก้ปัญหาเหล่านี้ไม่ได้ผล

เมื่อฉันรีสตาร์ทไคลเอ็นต์ Datagrip มันก็ไม่มีปัญหาอีกต่อไปและฉันสามารถวางตารางได้อีกครั้ง


3
รีสตาร์ท / รีบูต - โซลูชันที่ใช้งานได้ 100% สำหรับปัญหาคอมพิวเตอร์ใด ๆ อย่างไรก็ตามใน Prod การรีบูตไม่สามารถทำได้เสมอไป
ถาม

2
ฉันมีปัญหาเดียวกันและการปิด DataGrip ก็ทำให้การล็อกทั้งหมดหลุดทันที นั่นเป็นการเสียเวลามากมาย ..
ScottBurfieldMills
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.