Kebuntuan mengembalikan kesalahan 1213
yang harus Anda proses di sisi klien
Perhatikan bahwa deadlock dan lock wait adalah hal yang berbeda. Dalam kebuntuan, tidak ada transaksi "gagal":keduanya bersalah. Tidak ada jaminan mana yang akan dibatalkan.
Kebuntuan terjadi dalam skenario seperti ini:
UPDATE t_first -- transacion 1 locks t_first
SET id = 1;
UPDATE t_second -- transaction 2 locks t_second
SET id = 2;
UPDATE t_second -- transaction 1 waits for transaction 2 to release the lock on t_second
SET id = 2;
UPDATE t_first -- transaction 2 waits for transaction 1 to release the lock on t_first. DEADLOCK
SET id = 2;
Apakah Anda yakin tidak membingungkannya dengan menunggu kunci?
Lock wait terjadi setiap kali transaksi mencoba mengunci sumber daya yang sudah dikunci oleh transaksi lain.
Pada contoh di atas, kunci tunggu terjadi pada langkah 3
.
Karena ini adalah situasi normal (tidak seperti kebuntuan), yang dapat diselesaikan dari luar dengan melakukan atau memutar kembali transaksi yang menahan kunci, InnoDB
tidak akan mencoba untuk mengembalikan transaksi yang menahan kunci.
Sebaliknya, itu hanya akan membatalkan pernyataan yang mencoba mendapatkan kunci setelah batas waktu terjadi.
Batas waktu secara default adalah 50
detik dan disetel menggunakan innodb_lock_wait_timeout
.
Pernyataan gagal (yang mencoba memperoleh kunci) akan mengembalikan kesalahan 1205
.