ไม่สามารถวางตารางได้เนื่องจากกำลังรอการล็อกเมตาดาต้า


11

เราพยายามที่จะวางตารางหนึ่ง แต่มันถูกแขวนและเมื่อเราเห็นคำสั่ง 'SHOW PROCESSLIST' มันแสดงว่า 'กำลังรอเมตาดาต้าล็อคข้อมูล' แม้ว่าเราจะไม่สามารถทำการดำเนินการใด ๆ ในตารางนั้น ไม่มีใครรู้วิธีการแก้ไขหรือไม่

คำตอบ:


8

หากมีการเข้าถึงตาราง InnoDB ผ่านทาง SELECT หรือ DML (INSERT, UPDATE, DELETE) คุณควรคาดหวังว่าจะได้รับการล็อคเมตาดาต้า

ตามเอกสาร MySQL เกี่ยวกับ MetaData Locking :

เพื่อให้แน่ใจว่าธุรกรรม serializability เซิร์ฟเวอร์ต้องไม่อนุญาตให้หนึ่งเซสชันเพื่อดำเนินการคำสั่ง data definition language (DDL) บนตารางที่ใช้ในธุรกรรมที่ไม่สมบูรณ์ในเซสชันอื่น เซิร์ฟเวอร์ทำได้โดยได้รับการล็อคข้อมูลเมตาบนตารางที่ใช้ภายในธุรกรรมและชะลอการปลดล็อคเหล่านั้นจนกว่าธุรกรรมจะสิ้นสุด ล็อคข้อมูลเมตาบนตารางป้องกันการเปลี่ยนแปลงโครงสร้างของตาราง วิธีการล็อคนี้มีความหมายว่าตารางที่ใช้โดยธุรกรรมภายในหนึ่งเซสชันไม่สามารถใช้ในคำสั่ง DDL โดยเซสชันอื่นจนกว่าธุรกรรมจะสิ้นสุด

ที่ถูกกล่าวว่าคุณควรตรวจสอบหรือไม่ว่าอีกครั้งเซสชัน DB ถือล็อคในตาราง หากเซสชั่นดังกล่าวเป็นธุรกรรมที่ยังไม่เสร็จสิ้นอาจมีการระงับ

หากคุณก็ต้องกลับ diskspace TRUNCATE TABLEได้อย่างรวดเร็วคุณสามารถเรียกใช้

ข้อเสนอแนะ

ลองเปลี่ยนชื่อตารางก่อนที่จะพยายามวางดังต่อไปนี้:

ALTER TABLE mydb.mytable RENAME mydb.mytabletodrop;
TRUNCATE TABLE mydb.mytabletodrop;
DROP TABLE mydb.mytabletodrop;

ข้อเสนอแนะไม่ทำงานสำหรับเรา แต่เราจะได้รับ "กำลังรอการล็อคเมตาดาต้าของตาราง" ในการเปลี่ยนfooชื่อตารางfootodrop
ALTIC

@ Motin ทั้งหมดนั่นหมายความว่าการเชื่อมต่อฐานข้อมูลอย่างน้อยหนึ่งรายการยังคงเข้าถึงตารางfooอยู่ เมื่อการเชื่อมต่อเหล่านั้นเสร็จสิ้นจากนั้นALTER TABLEสามารถดำเนินการต่อได้
RolandoMySQLDBA

7

คุณควรค้นหาว่าแบบสอบถามใดที่ทำให้การล็อกธุรกรรมโดยการดำเนินการ:

SHOW ENGINE INNODB STATUS

TRANSACTIONและดูในส่วนที่มีชื่อว่า หลังจากนั้นคุณควรจะฆ่าแบบสอบถามนั้นเพื่อทิ้งฐานข้อมูล

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

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