Nếu bạn vừa giết một truy vấn lớn, sẽ mất thời gian để rollback
. Nếu bạn đưa ra một truy vấn khác trước khi truy vấn bị giết hoàn tất, bạn có thể gặp lỗi hết thời gian khóa. Đó là những gì đã xảy ra với tôi. Giải pháp chỉ là chờ một chút.
Chi tiết:
Tôi đã đưa ra một truy vấn XÓA để xóa khoảng 900.000 trong số khoảng 1 triệu hàng.
Tôi đã chạy lỗi này (chỉ xóa 10% số hàng):
DELETE FROM table WHERE MOD(id,10) = 0
Thay vì điều này (loại bỏ 90% các hàng):
DELETE FROM table WHERE MOD(id,10) != 0
Tôi muốn xóa 90% các hàng, không phải 10%. Vì vậy, tôi đã giết quá trình trong dòng lệnh MySQL, biết rằng nó sẽ khôi phục lại tất cả các hàng mà nó đã xóa cho đến nay.
Sau đó, tôi chạy lệnh chính xác ngay lập tức và gặp lock timeout exceeded
lỗi ngay sau đó. Tôi nhận ra rằng khóa thực sự có thể là rollback
truy vấn bị giết vẫn đang diễn ra trong nền. Vì vậy, tôi đã đợi một vài giây và chạy lại truy vấn.