Artikel ini membawa anda pengetahuan yang berkaitan tentang kunci MySQL terutamanya memperkenalkan kunci dua peringkat dan kebuntuan Mari kita lihat bersama-sama.
Konsep
membincangkan tentang InnoDB
cara mengendalikan penguncian dan pelepasan kunci baris.
Semasa proses transaksi, apabila rekod dipadamkan berdasarkan kunci utama, kunci eksklusif akan segera ditambah, yang melengkapkan kuncipentas.
Apabila tindakan pemadaman selesai, kunci tidak akan dilepaskan serta-merta. Ia akan melepaskan kunci sehingga transaksi dilakukan. Masalah yang disebabkan oleh
|
Transaksi B |
||||||||
---|---|---|---|---|---|---|---|---|---|
bermula; kemas kini set t k=k 1 di mana id=1;kemas kini set t k=k 1 di mana id=2; 事务 B
|
|||||||||
mulakan; kemas kini t set k=k 2 di mana id=1; |
|||||||||
id=1 komit;
|
事务 A
Menurut protokol penguncian dua fasa, 事务 B
Ia akan disekat kerana data dikunci oleh 事务 B
事务 C
事务 D
, kerana 事务 B
perlu mendapatkan kunci sebelum meneruskan operasi satu langkah.
, tetapi juga 事务 A
, id=1
, dsb., penyelesaiannya adalah sama seperti 事务 B
masalah, masalah akan menjadi lebih besar, dan lebih banyak benang akan disekat. [Pembelajaran yang disyorkan: **热点行**
Tutorial video MySQL
Cara menangani masalah di atas
Kita harus cuba sedaya upaya untuk meletakkan pernyataan yang boleh menyebabkan penyekatan pada penghujung transaksi, seperti Pernyataan(Ia kerap digunakan dalam pelbagai urus niaga, seperti rekod baki akaun pembayaran syarikat, iaitu ), tetapi kunci telah diperoleh pada permulaan transaksi.
Pada asasnya, ia memendekkan masa antara pemerolehan kunci dan pelepasan kunci. Iaitu, masa kunci dipendekkan, dengan itu mengurangkan sekatan yang disebabkan oleh kunci.
KebuntuanKonsep事务 A
资源 A
事务 B
资源 B
事务 A
资源 B
事务 B
资源 A
Pergi dapatkan kunci
.InnoDB
50
50
Jelas sekali, dalam langkah 3 dan 4, kedua-dua transaksi A dan B ingin mendapatkan kunci, tetapi kedua-duanya tidak boleh mendapatkannya kerana pihak yang satu lagi belum melepaskan kunci pada sumber. Fenomena ini adalah jalan buntu. Masalah yang disebabkan oleh innodb_lock_wait_timeout
- Jalan buntu 1
Dalam 1
, terdapat konfigurasi masa menunggu untuk pemerolehan kunci Jika masa ini melebihi masa ini, pengecualian akan dilemparkan. Kali ini lalai ialah
saat untuk bertindak balas. .
Adakah cukup untuk menetapkan masa konfigurasi lebih pendek? Suka saat? InnoDB
CPU
tidak sepatutnya dibenarkan, kerana ia boleh menjejaskan perniagaan biasa anda Mungkin perniagaan anda menyebabkan masa pelaksanaan transaksi anda agak lama, melebihi
线程A
线程A
Bagaimana untuk menangani masalah di atas?
innodb_deadlock_detect
Dalam
tertentu, ia akan mengesan 15
Sama ada kebergantungan dikunci oleh benang serentak lain, dan seterusnya, dan akhirnya menentukan sama ada kunci ini akan membentuk jalan buntu. 15
. Mysql
Mysql
Hanya mewakili pemprosesan dan ringkasan masalah ini berdasarkan pembelajaran semasa peribadi:
1 Matikan pengesanan jalan buntu dan pendekkan konfigurasi masa penahanan kunci kepada anggaran masa tertinggi, biasanya Ia akan tidak melebihi
saat Selepas saat, mekanisme cuba semula diperlukan. 2. Hidupkan pengesanan jalan buntu, kawal bilangan sambungan serentak pada lapisan aplikasi, gunakan kumpulan sambungan untuk mengawal bilangan sambungan dan hadkan bilangan maksimum sambungan pada lapisan perkhidmatan. Di atas ialah ringkasan cara mengurangkan kesan prestasi kunci baris.Atas ialah kandungan terperinci Mari kita bincangkan tentang kunci dua fasa Mysql dan kebuntuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!