informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Daftar isi
1. Penjelasan singkat tentang kunci database
2. Penjelasan singkat tentang kunci celah
3. Bagaimana kunci tingkat baris diterapkan di InnoDB
4. Dalam keadaan apa kebuntuan akan terjadi pada database?
5. Jelaskan secara singkat solusi kebuntuan basis data
Kunci adalah fitur utama yang membedakan sistem database dari sistem file. Mekanisme kunci digunakan untuk mengelola akses bersamaan ke sumber daya bersama. Mari kita ambil mesin InnoDB pada database MySQL sebagai contoh untuk memperkenalkan secara singkat karakteristik kunci.
Jika suatu transaksi T1 telah memperoleh kunci bersama baris r, maka transaksi T2 lainnya dapat segera memperoleh kunci bersama baris r, karena pembacaan tidak mengubah data baris r.Tetapi jika transaksi lain T3 ingin mendapatkan kunci eksklusif pada baris r, maka harus menunggu transaksi T1 dan T2 melepaskan kunci bersama pada baris rkunci tidak kompatibel . Gambar berikut menunjukkan kompatibilitas kunci bersama dan kunci eksklusif. Terlihat bahwa kunci X tidak kompatibel dengan kunci apa pun, sedangkan kunci S hanya kompatibel dengan kunci S. Penting untuk dicatat bahwa kunci S dan kunci X adalah kunci baris, dan kompatibilitas mengacu pada kompatibilitas kunci pada rekaman (baris) yang sama.
X | S | |
X | Tidak cocok | Tidak cocok |
S | Tidak cocok | kompatibel |
Kunci granularitas : Mesin penyimpanan InnoDB mendukung penguncian multi-perincian, yang memungkinkan transaksi memiliki kunci tingkat baris dan kunci tingkat tabel pada saat yang bersamaan. Untuk mendukung operasi penguncian pada perincian yang berbeda, mesin penyimpanan InnoDB mendukung metode penguncian tambahan yang disebut penguncian niat. Kunci niat membagi objek yang dikunci menjadi beberapa tingkatan. Kunci niat berarti bahwa transaksi ingin dikunci pada perincian yang lebih baik.
Mesin penyimpanan InnoDB mendukung desain kunci tujuan yang relatif sederhana, dan kunci tujuan adalah kunci tingkat tabel. Tujuan utama desain adalah untuk mengungkapkan jenis kunci yang diminta untuk baris berikutnya dalam suatu transaksi. Ini mendukung dua jenis kunci niat:
1. Intent Shared Lock (IS Lock), transaksi ingin mendapatkan kunci bersama untuk baris tertentu dalam sebuah tabel.
2. Maksud kunci eksklusif (IX Lock), transaksi ingin mendapatkan kunci eksklusif pada baris tertentu dalam sebuah tabel.
Karena mesin penyimpanan InnoDB mendukung kunci tingkat baris, kunci tujuan tidak akan memblokir permintaan apa pun kecuali pemindaian tabel lengkap. Jadi kompatibilitas kunci maksud tingkat tabel dan kunci tingkat baris adalah sebagai berikut:
ADALAH | Bahasa Indonesia: Bahasa Indonesia: IX | S | X | |
ADALAH | kompatibel | kompatibel | kompatibel | Tidak cocok |
Bahasa Indonesia: Bahasa Indonesia: IX | kompatibel | kompatibel | Tidak cocok | Tidak cocok |
S | kompatibel | Tidak cocok | kompatibel | Tidak cocok |
X | Tidak cocok | Tidak cocok | Tidak cocok | Tidak cocok |
algoritma kunci: Mesin penyimpanan InnoDB memiliki tiga algoritma kunci baris, yaitu:
1. Record Lock: Mengunci satu baris record.
2. Kunci Celah: kunci celah, kunci
3. Kunci Tombol Berikutnya: Kunci Celah+Kunci Rekam, mengunci rentang dan mengunci rekaman itu sendiri.
Record Lock akan selalu mengunci catatan indeks. Jika tabel mesin penyimpanan InnoDB tidak diatur dengan indeks apa pun saat dibuat, maka mesin penyimpanan InnoDB akan menggunakan kunci utama implisit untuk mengunci. Next-Key Lock adalah algoritma penguncian yang menggabungkan Gap Lock dan Record Lock. Di bawah algoritma Next-Key Lock, InnoDB menggunakan algoritma penguncian ini untuk kueri baris. Teknologi penguncian yang menggunakan Next-Key Lock disebut Next-Key Locking, dan desainnya tidak dimaksudkan untuk menyelesaikan Masalah Phantom (pembacaan hantu). Dengan menggunakan teknologi penguncian ini, yang dikunci bukanlah nilai tunggal, melainkan suatu rentang, yang merupakan penyempurnaan dari Predict Lock.
Tentang kebuntuan : Deadlock mengacu pada fenomena dua atau lebih transaksi menunggu satu sama lain karena persaingan sumber daya selama eksekusi. Tanpa kekuatan eksternal, urusan tidak akan bisa berjalan maju.
peningkatan kunci :Eskalasi kunci mengacu pada pengurangan granularitas kunci saat ini. Misalnya, database dapat mengupgrade 1.000 kunci baris tabel menjadi kunci halaman, atau mengupgrade kunci halaman menjadi kunci tabel.
Mesin penyimpanan InnoDB tidak memiliki masalah peningkatan kunci. Karena tidak menghasilkan kunci baris berdasarkan setiap record, sebaliknya mengelola kunci berdasarkan setiap halaman yang diakses oleh setiap transaksi, menggunakan metode bitmap. Oleh karena itu, apakah suatu transaksi mengunci satu catatan atau beberapa catatan di halaman, biayanya biasanya sama.
Mesin penyimpanan InnoDB memiliki tiga algoritma kunci baris, dan kunci celah (Gap Lock) adalah salah satunya. Kunci celah digunakan untuk mengunci suatu rentang, tetapi tidak untuk mengunci rekaman itu sendiri. Tujuannya adalah untuk mencegah beberapa transaksi memasukkan catatan ke dalam rentang yang sama, yang dapat menyebabkan masalah pembacaan hantu.
Penguncian tingkat baris InnoDB diterapkan dengan mengunci entri indeks pada indeks. InnoDB menggunakan kunci tingkat baris hanya ketika data diambil melalui kondisi indeks, jika tidak, InnoDB menggunakan kunci tabel.
Ketika baris tertentu dalam tabel dikunci, transaksi berbeda dapat menggunakan indeks berbeda untuk mengunci baris berbeda. Selain itu, baik menggunakan indeks kunci utama, indeks unik, atau indeks biasa, InnoDB akan menggunakan kunci baris untuk mengunci data.
Kebuntuan mengacu pada fenomena di mana dua atau lebih transaksi menunggu satu sama lain karena persaingan untuk mendapatkan sumber daya selama eksekusi. Tanpa kekuatan eksternal, urusan tidak akan bisa berjalan maju.Tabel berikut menunjukkan situasi klasik kebuntuan, yaitu A menunggu B dan B menunggu A. Masalah kebuntuan ini disebutKebuntuan AB-BA。
waktu | Sesi A | Sesi B |
1 | MULAI: | |
2 | mysql>PILIH * DARI t DIMANA a = 1 UNTUK PEMBARUAN; ************1.baris************ sebuah:1 1 baris dalam set (0,00 detik) | MULAI: |
3 | mysql>PILIH * DARI t DIMANA a = 2 UNTUK PEMBARUAN; ************1.baris************ sebuah:2 1 baris dalam set (0,00 detik) | |
4 | mysql>PILIH * DARI t DIMANA a = 2 UNTUK PEMBARUAN; #Tunggu | |
5 | mysql>PILIH * DARI t DIMANA a = 1 UNTUK PEMBARUAN; ERROR 1213(40001): Kebuntuan ditemukan saat mencoba mendapatkan kunci;coba mulai ulang transaksi |
Cara paling sederhana untuk mengatasi masalah deadlock adalah dengan time out, yaitu ketika dua transaksi menunggu satu sama lain, ketika waktu tunggu yang satu melebihi ambang batas yang ditentukan, salah satu transaksi dibatalkan, dan transaksi menunggu lainnya dapat dilanjutkan.
Selain mekanisme timeout, database saat ini juga umumnya menggunakan metode grafik tunggu (wait graph) untuk mendeteksi kebuntuan. Ini adalah pendekatan yang lebih proaktif terhadap deteksi kebuntuan dibandingkan solusi batas waktu. Pendekatan ini juga diadopsi oleh mesin penyimpanan InnoDB. grafik tunggu memerlukan database untuk menyimpan dua jenis informasi berikut:
1. Kunci daftar informasi;
2. Daftar tunggu transaksi;
Sebuah grafik dapat dibangun melalui linked list di atas, dan jika terdapat loop pada grafik tersebut berarti terjadi deadlock, sehingga resource saling menunggu. Ini adalah mekanisme deteksi kebuntuan yang lebih aktif. Ketika setiap transaksi meminta kunci dan menunggu, ini akan menentukan apakah ada perulangan. Jika ada, ada kebuntuan. Secara umum, mesin penyimpanan InnoDB memilih untuk memutar kembali transaksi tersebut jumlah pembatalan terkecil.