Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Deteksi Kebuntuan MySQL melalui PHP

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MASUKKAN MASSAL di MYSQL

  2. Mengapa gambar saya tidak muncul?

  3. Gunakan Database Relasional MySQL di Fedora 12

  4. Mencoba mengakses offset array pada nilai tipe bool

  5. Divisi SQL menggunakan 'tidak ada' di mysql