Câu trả lời:
SHOW ENGINE INNODB STATUS \G
Tìm Phần -
TRANSACTIONS
Chúng tôi có thể sử dụng Bảng INFORMATION_SCHEMA .
Truy vấn hữu ích
Để kiểm tra tất cả các giao dịch khóa đang chờ đợi:
USE INFORMATION_SCHEMA;
SELECT * FROM INNODB_LOCK_WAITS;
Danh sách các giao dịch chặn:
SELECT *
FROM INNODB_LOCKS
WHERE LOCK_TRX_ID IN (SELECT BLOCKING_TRX_ID FROM INNODB_LOCK_WAITS);
HOẶC LÀ
SELECT INNODB_LOCKS.*
FROM INNODB_LOCKS
JOIN INNODB_LOCK_WAITS
ON (INNODB_LOCKS.LOCK_TRX_ID = INNODB_LOCK_WAITS.BLOCKING_TRX_ID);
Danh sách các ổ khóa trên bảng cụ thể:
SELECT * FROM INNODB_LOCKS
WHERE LOCK_TABLE = db_name.table_name;
Danh sách các giao dịch đang chờ khóa:
SELECT TRX_ID, TRX_REQUESTED_LOCK_ID, TRX_MYSQL_THREAD_ID, TRX_QUERY
FROM INNODB_TRX
WHERE TRX_STATE = 'LOCK WAIT';
Tham khảo - Khắc phục sự cố MySQL: Phải làm gì khi truy vấn không hoạt động , Chương 6 - Trang 96.
Nếu bạn không thể tìm thấy quy trình khóa bảng (vì nó đã chết), có thể một chuỗi vẫn đang dọn dẹp như thế này
phần GIAO DỊCH của
show engine innodb status;
cuối cùng
---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
như đã đề cập trong một bình luận trong Xóa bế tắc giao dịch?
bạn có thể thử hủy chuỗi giao dịch trực tiếp, tại đây với
KILL 5208136;
đã làm cho tôi.
Tôi đã gặp sự cố tương tự với Datagrip và không có giải pháp nào trong số này hoạt động.
Khi tôi khởi động lại Máy khách Datagrip, nó không còn là vấn đề nữa và tôi có thể bỏ bảng lại.
INFORMATION_SCHEMA
cơ sở dữ liệu.