Rumah >pangkalan data >tutorial mysql >Kunci urus niaga mysql tunggu tamat masa Lock tunggu tamat masa yang perlu dilakukan;

Kunci urus niaga mysql tunggu tamat masa Lock tunggu tamat masa yang perlu dilakukan;

PHPz
PHPzke hadapan
2023-06-03 11:32:473057semak imbas

Senario masalah

Persekitaran kejadian masalah:
1 Masukkan dan kemas kini sekeping data yang sama berturut-turut dalam urus niaga yang sama
2 . Konkurensi tinggi berlaku serta-merta;

terus membuang pengecualian, maklumat pengecualian:

org.springframework.dao.CannotAcquireLockException:

### Ralat mengemas kini pangkalan data. sql.SQLException: Tamat masa menunggu kunci melebihi; cuba mulakan semula transaksi
### Ralat mungkin melibatkan com.*.dao.mapper.PhoneFlowMapper.updateByPrimaryKeySelective-Inline
### Ralat berlaku semasa menetapkan parameter
### SQL:-----Berikut ialah pernyataan SQL dan maklumat tindanan--------

Analisis sebab

pada tinggi Dalam kes concurrency, Transaksi Spring menyebabkan kebuntuan pangkalan data, dan operasi seterusnya tamat masa dan membuang pengecualian.

Pangkalan data MySQL menggunakan mod InnoDB Parameter lalai: innodb_lock_wait_timeout menetapkan masa menunggu kunci kepada 50s Setelah kunci pangkalan data melebihi masa ini, ralat akan dilaporkan.

Penyelesaian

1 Gunakan penyataan berikut untuk mencari data untuk transaksi yang diserahkan dan mematikan rangkaian.

select * from information_schema.innodb_trx

2 Meningkatkan masa menunggu kunci, iaitu, meningkatkan nilai parameter item konfigurasi berikut, dalam saat (s)

innodb_lock_wait_timeout=500

3 kali untuk transaksi.

Maklumat rujukan

1. Ia disebabkan oleh urus niaga semasa menunggu urus niaga lain melepaskan sumber kunci. Anda boleh menemui jadual dan pernyataan bersaing untuk sumber kunci, mengoptimumkan SQL, mencipta indeks, dsb. Jika itu masih tidak berkesan, anda boleh mengurangkan bilangan urutan serentak dengan sewajarnya.

2. Transaksi tamat masa sementara menunggu untuk mengunci jadual tertentu Dianggarkan bahawa jadual sedang dikunci oleh proses lain dan belum dikeluarkan.

Anda boleh menggunakan SHOW INNODB STATUS/G untuk menyemak status kunci.

3. Cari penyelesaian dan tambah:

TransactionDeadLockDetectionTimeOut=10000 (ditetapkan kepada 10 saat) dalam kawasan [ndbd lalai] nod pengurusan adalah 1200 (1.2 saat)

4 , InnoDB akan mengesan kebuntuan dan rollback secara automatik, atau menamatkan situasi kebuntuan.

InnoDB mengesan kebuntuan transaksi secara automatik dan melancarkan transaksi atau transaksi untuk memecahkan kebuntuan InnoDB cuba memilih urus niaga kecil untuk melancarkan semula, di mana saiz transaksi ditentukan oleh bilangan baris yang dimasukkan. , dikemas kini atau dipadamkan.

Jika parameter innodb_table_locks=1 dan autocommit=0, InnoDB akan memberi perhatian kepada kebuntuan jadual dan kunci peringkat baris pada peringkat MySQL. Selain itu, InnoDB tidak mengesan arahan Jadual Kunci MySQL dan kebuntuan enjin storan lain. Anda harus menetapkan innodb_lock_wait_timeout untuk menyelesaikan situasi ini.

innodb_lock_wait_timeout ialah tamat masa untuk Innodb melepaskan kunci peringkat baris.

Atas ialah kandungan terperinci Kunci urus niaga mysql tunggu tamat masa Lock tunggu tamat masa yang perlu dilakukan;. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam