Jika Anda baru saja membunuh permintaan besar, itu akan membutuhkan waktu rollback
. Jika Anda mengeluarkan kueri lain sebelum kueri yang terbunuh selesai bergulir kembali, Anda mungkin mendapatkan kesalahan batas waktu kunci. Itulah yang terjadi pada saya. Solusinya hanya menunggu sebentar.
Detail:
Saya telah mengeluarkan permintaan DELETE untuk menghapus sekitar 900.000 dari sekitar 1 juta baris.
Saya menjalankan ini secara tidak sengaja (hanya menghapus 10% dari baris):
DELETE FROM table WHERE MOD(id,10) = 0
Alih-alih ini (menghapus 90% dari baris):
DELETE FROM table WHERE MOD(id,10) != 0
Saya ingin menghapus 90% dari baris, bukan 10%. Jadi saya membunuh proses di baris perintah MySQL, mengetahui bahwa itu akan memutar kembali semua baris yang telah dihapus sejauh ini.
Kemudian saya menjalankan perintah yang benar segera, dan mendapat lock timeout exceeded
kesalahan segera setelah itu. Saya menyadari bahwa kunci itu mungkin sebenarnya adalah rollback
permintaan yang terbunuh yang masih terjadi di latar belakang. Jadi saya menunggu beberapa detik dan menjalankan kembali kueri.