Apakah kunci jurang dan masalah apa yang diselesaikannya?
Jun 17, 2025 am 09:35 AMAlasan utama untuk kunci jurang adalah untuk mencegah bacaan hantu dan memastikan konsistensi data pangkalan data pada tahap pengasingan baca berulang. Apabila melakukan pertanyaan pelbagai, seperti pilih ... untuk kemas kini, InnoDB akan menambah kunci jurang ke julat indeks, menghalang urus niaga lain daripada memasukkan rekod baru ke dalam julat. 1. Kunci jurang mengunci "jurang" antara rekod indeks, bukan baris tertentu; 2. Ia digunakan terutamanya untuk pertanyaan pelbagai, seperti pilih ... untuk kemas kini atau pilih ... kunci dalam mod saham; 3. Kunci jurang dikeluarkan pada akhir transaksi; 4. Kunci jurang tidak menghalang operasi membaca, tetapi akan menghalang urus niaga lain daripada memasukkan data ke dalam julat terkunci; 5. Kunci jurang kadang-kadang menggabungkan dengan kunci rekod untuk membentuk kunci pro-kunci (kunci seterusnya); 6. Penggunaan yang tidak wajar boleh menyebabkan pertarungan, kebuntuan atau kemerosotan prestasi serentak. Untuk mengurangkan masalah, urus niaga harus disimpan pendek, seragam dalam urutan, atau tahap pengasingan harus diturunkan jika konsistensi yang kuat tidak diperlukan.
Kunci jurang adalah jenis kunci yang digunakan dalam pangkalan data, terutamanya dalam sistem seperti enjin penyimpanan InnoDB MySQL, untuk mengelakkan urus niaga lain daripada memasukkan baris baru ke dalam julat data tertentu. Ia memainkan peranan penting dalam mengekalkan konsistensi data dan mencegah isu -isu seperti bacaan hantu.
Mengapa kunci jurang wujud
Dalam sistem pangkalan data yang menyokong tahap pengasingan urus niaga seperti bacaan berulang , terdapat risiko bacaan hantu - di mana pertanyaan yang dilaksanakan dua kali dalam urus niaga yang sama mungkin mengembalikan set baris yang berbeza kerana transaksi lain memasukkan baris sepadan baru di antara.
Untuk mengelakkan ini, pangkalan data menggunakan kunci jurang untuk menyekat sisipan ke dalam julat data yang diimbas atau dipertimbangkan oleh transaksi yang sedia ada.
Contohnya:
- Jika anda menjalankan
SELECT * FROM users WHERE age BETWEEN 20 AND 30 FOR UPDATE;
, InnoDB akan meletakkan kunci jurang pada julat indeks yang meliputi umur 20 hingga 30 tahun. - Ini menghalang urus niaga lain daripada memasukkan pengguna baru dengan umur 25 tahun sehingga transaksi anda selesai.
Bagaimana kunci jurang berfungsi
Kunci jurang memohon bukan sahaja kepada rekod sedia ada tetapi juga kepada "jurang" antara rekod indeks - termasuk sebelum rekod pertama dan selepas yang terakhir. Inilah cara mereka berfungsi:
- Mereka mengunci julat daripada baris individu.
- Mereka digunakan dengan pertanyaan berasaskan pelbagai , terutamanya apabila menggunakan
SELECT ... FOR UPDATE
atauSELECT ... LOCK IN SHARE MODE
. - Mereka dibebaskan apabila urus niaga berakhir (sama ada melalui
COMMIT
atauROLLBACK
).
Perkara penting:
- Kunci jurang tidak menghalang bacaan dari transaksi lain.
- Mereka terutamanya menyekat sisipan ke dalam julat terkunci.
- Mereka kadang-kadang boleh digabungkan dengan kunci rekod untuk membentuk kunci kunci seterusnya , yang mengunci kedua-dua rekod indeks dan jurang sebelum itu.
Apabila kunci jurang menimbulkan masalah
Walaupun kunci jurang membantu mengekalkan konsistensi, mereka juga boleh membawa kepada masalah prestasi atau kebuntuan jika tidak ditangani dengan teliti.
Isu biasa termasuk:
- Peningkatan kandungan semasa menulis tinggi.
- Deadlocks Apabila pelbagai urus niaga cuba memasukkan ke dalam julat bertindih.
- Kelembapan prestasi disebabkan oleh penguncian yang berlebihan pada julat besar.
Contohnya:
- Dua transaksi masing -masing cuba memasukkan baris baru ke dalam julat yang sama mungkin kebuntuan jika kedua -duanya meminta jurang mengunci konflik itu.
- Aplikasi yang menghasilkan nilai auto dalam julat tertentu (seperti memberikan ID unik atau cap waktu) mungkin menderita di bawah penguncian jurang yang berat.
Untuk mengurangkan masalah:
- Pastikan urus niaga pendek dan fokus.
- Operasi pesanan secara konsisten merentasi urus niaga.
- Pertimbangkan untuk menurunkan tahap pengasingan jika hantu berbunyi bukanlah kebimbangan untuk permohonan anda.
Itulah pada dasarnya bagaimana kunci jurang berfungsi - mereka tidak rumit, tetapi mereka mempengaruhi bagaimana pangkalan data anda mengendalikan kesesuaian dan konsistensi.
Atas ialah kandungan terperinci Apakah kunci jurang dan masalah apa yang diselesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dengan perkembangan berterusan teknologi komputer, pengaturcaraan serentak berbilang benang telah menjadi topik penting dalam pembangunan perisian semasa. Dalam C++, melaksanakan pengaturcaraan serentak juga merupakan tugas yang sangat kritikal dan sukar. Dalam proses pengaturcaraan serentak, kita mungkin menghadapi banyak masalah, seperti penyegerakan data, kebuntuan, dll. Masalah ini boleh menjejaskan ketepatan dan prestasi program secara serius. Oleh itu, artikel ini akan bermula daripada isu pengaturcaraan serentak dalam C++ dan cara menanganinya, dan memperkenalkan beberapa kemahiran praktikal kepada anda. 1. Penyegerakan data Dalam pengaturcaraan serentak, penyegerakan data ialah a

MySQL ialah sistem pengurusan pangkalan data hubungan sumber terbuka yang biasa digunakan yang popular secara meluas di kalangan pengguna kerana kemudahan penggunaan dan kebolehpercayaannya. Tetapi dalam situasi konkurensi yang tinggi, MySQL juga akan mengalami beberapa masalah, seperti .lock waiting dan deadlock. Artikel ini akan memperkenalkan cara menemui dan menyelesaikan masalah konkurensi dalam pangkalan data MySQL. 1. Berlakunya masalah concurrency Apabila berbilang pengguna mengakses pangkalan data MySQL pada masa yang sama dan cuba mengubah suai data, masalah concurrency akan berlaku. Sebagai contoh, pengguna A sedang mengubah suai baris data tertentu dalam pangkalan data, dan pengguna B juga mahu mengubah suai baris yang sama.

Ringkasan masalah dan penyelesaian biasa dalam pembangunan teknologi Java Pengenalan: Dalam proses pembangunan teknologi Java, kedua-dua pembangun pemula dan berpengalaman akan menghadapi pelbagai masalah. Isu ini kadangkala menyebabkan kelewatan dalam projek pembangunan atau ralat masa jalan. Oleh itu, memahami masalah biasa ini dan penyelesaiannya adalah penting untuk meningkatkan kecekapan pembangunan dan kualiti projek. Artikel ini akan menyenaraikan beberapa masalah pembangunan Java biasa dan menyediakan penyelesaian yang sepadan serta contoh kod khusus. Masalah 1: NullPointerException (NullPo

Dalam bahasa Go, adalah perkara biasa untuk menggunakan coroutine untuk operasi serentak, tetapi anda juga akan menghadapi beberapa masalah serentak, seperti kebuntuan, keadaan perlumbaan, dsb. Artikel ini akan meneroka sebab masalah konkurensi berlaku apabila program Go dilaksanakan. 1. Punca Masalah Konkurensi Keadaan perlumbaan Keadaan perlumbaan merujuk kepada keputusan yang tidak dapat diramalkan yang mungkin berlaku apabila berbilang coroutine melakukan operasi baca dan tulis pada sumber yang sama pada masa yang sama. Keadaan ini sangat biasa dalam bahasa Go Contohnya, berbilang coroutine mengakses pembolehubah yang sama pada masa yang sama, dan mengubah suai nilai pembolehubah boleh menyebabkan ketidakpastian dalam keputusan. Dalam kes ini

Panduan Pelaksanaan Kunci Teragih ThinkPHP6: Menyelesaikan Masalah Konkurensi Pengenalan: Dalam sistem dengan akses serentak, selalunya berbilang pengguna atau proses beroperasi pada sumber yang sama pada masa yang sama Ini memerlukan mekanisme untuk memastikan pengecualian bersama sumber. akses. Kunci teragih ialah mekanisme yang digunakan untuk menyelesaikan masalah konkurensi Ia boleh memastikan bahawa hanya satu utas boleh mengakses sumber yang dikongsi pada masa yang sama. Artikel ini akan memperkenalkan cara menggunakan Redis sebagai storan bahagian belakang dalam rangka kerja ThinkPHP6 untuk melaksanakan kunci teragih. Melalui contoh kod,

Analisis Isu Konkurensi dalam Pengaturcaraan Berbilang Benang C++ Dengan pembangunan berterusan perkakasan komputer, pemproses berbilang teras telah menjadi arus perdana. Dalam kes ini, menggunakan multi-threading untuk menggunakan sepenuhnya prestasi pemproses berbilang teras telah menjadi teknologi penting dalam pembangunan program. Walau bagaimanapun, dalam pengaturcaraan berbilang benang, disebabkan oleh operasi serentak antara berbilang benang, beberapa masalah sering berlaku. Artikel ini akan menggunakan contoh kod khusus untuk menganalisis isu konkurensi dalam pengaturcaraan berbilang benang C++. Persaingan untuk sumber dikongsi antara utas berlaku apabila berbilang utas mengakses

Dengan perkembangan pesat aplikasi Internet, teknologi pembangunan Web juga sentiasa dikemas kini. Bahasa PHP adalah salah satu bahasa yang paling popular dalam pembangunan web, tetapi ia mempunyai batasan tertentu apabila ia berkaitan dengan isu benang serentak. Artikel ini akan memperkenalkan cara untuk mengesan masalah rangkaian serentak dalam pembangunan bahasa PHP dan menyediakan beberapa penyelesaian praktikal. Apakah masalah benang serentak? Masalah utas serentak merujuk kepada konflik antara beberapa utas berjalan pada masa yang sama. Dalam bahasa PHP, utas merujuk kepada permintaan serentak yang dijalankan pada masa yang sama. Oleh kerana PHP sendiri mengendalikan permintaan dalam satu utas,

Cara menangani isu multi-threading dan concurrency dalam pembangunan PHP memerlukan contoh kod khusus 1. Pengenalan Dengan perkembangan pesat Internet, prestasi dan pemprosesan serentak aplikasi Web adalah isu penting. Terutamanya dalam pembangunan PHP, memandangkan PHP adalah bahasa yang ditafsirkan, ciri-ciri benang tunggalnya membawa kepada keupayaan pemprosesan serentak yang terhad. Walau bagaimanapun, dalam beberapa senario, kami masih perlu melaksanakan pemprosesan berbilang benang dan serentak untuk meningkatkan prestasi dan pengalaman pengguna aplikasi web. Artikel ini akan memperkenalkan cara menangani isu multi-threading dan concurrency dalam pembangunan PHP
