Rumah  >  Artikel  >  pangkalan data  >  Artikel yang memperkenalkan pelaksanaan kunci dalam MySQL

Artikel yang memperkenalkan pelaksanaan kunci dalam MySQL

PHPz
PHPzasal
2023-04-19 14:11:191484semak imbas

Pelaksanaan kunci MySQL

MySQL ialah sistem pengurusan pangkalan data hubungan yang sangat popular yang menyokong pemprosesan banyak pengguna dan transaksi serentak. Dalam kes konkurensi yang tinggi, mekanisme kunci dalam MySQL adalah komponen penting. Cara menggunakan mekanisme penguncian secara rasional dan berkesan meningkatkan prestasi konkurensi adalah bahagian penting dalam pengoptimuman MySQL. Artikel ini akan memperkenalkan cara kunci dilaksanakan dalam MySQL dan cara memilih jenis kunci yang berbeza untuk memaksimumkan prestasi.

Ikhtisar

Dalam pangkalan data yang diakses secara serentak, apabila berbilang pengguna cuba mengubah suai data kongsi, pelbagai isu konsistensi data mungkin timbul. Masalah yang paling biasa ialah konflik baca dan tulis serta keadaan perlumbaan data. Untuk menyelesaikan masalah ini, MySQL menyediakan jenis kunci yang berbeza untuk membenarkan akses serentak sambil memastikan ketekalan data.

Kunci MySQL terbahagi terutamanya kepada dua kategori: kunci kongsi (Kunci Dikongsi) dan kunci eksklusif (Kunci Eksklusif). Kunci kongsi membenarkan berbilang pengguna mengakses sumber pada masa yang sama Pengguna ini hanya boleh membaca sumber tetapi tidak boleh mengubah suainya. Oleh itu, apabila pengguna sudah memegang kunci kongsi, pengguna lain boleh menggunakan kunci kongsi untuk membaca sumber yang sama, tetapi tidak boleh menggunakan kunci eksklusif untuk mengubah suainya. Kunci eksklusif hanya membenarkan seorang pengguna mengakses sumber yang sama pada satu masa dan berbilang pengguna tidak boleh memegang kunci pada masa yang sama.

Pelaksanaan kunci MySQL

Kaedah pelaksanaan kunci MySQL termasuk: kunci meja, kunci baris, kunci halaman, kunci tuple dan kunci celah (gap lock), dsb.

  1. Kunci meja

Kunci meja ialah kaedah penguncian yang paling asas Semasa operasi pengubahsuaian, keseluruhan meja dikunci. Oleh itu, pengguna lain tidak akan dapat mengakses jadual, menyebabkan prestasi serentak berkurangan. Mekanisme penguncian ini boleh berfungsi dengan baik jika data jadual adalah kecil atau terdapat sedikit akses serentak. Walau bagaimanapun, dalam pangkalan data besar atau pangkalan data konkurensi tinggi, kunci meja boleh menyebabkan beberapa masalah konkurensi dan mengurangkan prestasi sistem.

Sintaks kunci jadual adalah seperti berikut:

  • Kunci semua jadual: LOCK TABLES table_name [AS alias] lock_type[,table_name [AS alias] lock_type] …
  • Buka Kunci: BUKA KUNCI MEJA

Antaranya, lock_type boleh terdiri daripada jenis berikut:

  • BACA: kunci baca kongsi.
  • TULIS: Kunci tulis eksklusif.
  1. Kunci baris

Kunci baris ialah mekanisme penguncian yang lebih cekap dalam MySQL. Untuk pengubahsuaian rekod dalam jadual, MySQL hanya mengunci baris dalam jadual yang memenuhi syarat. Akses lain ke baris yang tidak memerlukan penguncian tidak terjejas. Dalam kes konkurensi yang tinggi dan volum data yang besar, menggunakan kunci baris dapat mengurangkan skop dan masa kunci dengan berkesan dan meningkatkan prestasi sistem.

Dalam enjin storan InnoDB, penguncian baris ialah mekanisme penguncian lalai.

Sintaks kunci baris:

  • Buka transaksi: MULAKAN TRANSAKSI
  • Kunci baris: PILIH … UNTUK KEMASKINI atau KEMASKINI … DI MANA …
  • Serahkan Transaksi : COMMIT atau ROLLBACK

Antaranya, PILIH ... UNTUK KEMASKINI boleh mengunci baris yang ditanda untuk mengelakkan baris tersebut diubah suai oleh transaksi lain. Kenyataan KEMASKINI ... DI MANA ... juga boleh mengunci satu atau lebih baris yang memenuhi syarat.

  1. Kunci halaman

Kunci halaman ialah mekanisme penguncian MySQL, yang mengunci jadual dalam unit halaman semasa mengimbas jadual. Penguncian halaman adalah lebih berkesan daripada penguncian baris apabila pengubahsuaian dibuat pada berbilang rekod kerana halaman itu terdiri daripada lebih banyak baris. Penguncian baris, sebaliknya, berfungsi secara individu pada setiap baris, jadi berfungsi lebih perlahan apabila mengubah suai berbilang baris.

Seperti namanya, kunci halaman adalah untuk mengunci halaman Semasa proses mengubah suai halaman tertentu, kunci peringkat halaman hanya melindungi seluruh halaman dan memberitahu sistem bahawa penguncian halaman lain tidak akan. menghalang pelaksanaan transaksi lain. Mengunci keseluruhan jadual atau indeks halaman boleh mengelak daripada mengunci terlalu banyak baris, tetapi ia juga boleh menyebabkan isu konkurensi.

Cara menggunakan kunci halaman:

  • Tukar mod enjin storan InnoDB dan tetapkan mod komit (mod_komit) kepada 2, yang bermaksud menggunakan kunci peringkat halaman.
  • Pada setiap peringkat melaksanakan arahan SQL, kunci dan buka kunci rekod.

Gunakan arahan berikut untuk menjadikan enjin InnoDB menggunakan kunci peringkat halaman:

  • SET GLOBAL innodb_locks_unsafe_for_binlog=1;
  • TETAPKAN PENGASINGAN TRANSAKSI SESI BACA BOLEH DIULANG ;

Apabila menggunakan kunci halaman, anda mesti berhati-hati untuk tidak menggunakan LIMIT dalam pernyataan SQL untuk mengehadkan bilangan baris pertanyaan, kerana ini mungkin menyebabkan pangkalan data berubah daripada kunci peringkat baris kepada kunci aras meja.

  1. Kunci Tuple

Kunci Tuple, juga dikenali sebagai kunci Tuple, ialah kunci dalam enjin storan MySQL. Dalam enjin InnoDB, kunci tuple hanya digunakan pada indeks sekunder "bukan unik" untuk menyokong operasi serentak. Jika tupel dikunci oleh transaksi lain, transaksi lain hanya boleh melengkapkan pengubahsuaian rekod dengan nilai indeks yang sama, bukan pengubahsuaian keseluruhan baris data.

Sintaks asas kunci tuple:

  • PILIH … DARI nama_jadual WHERE key_column=user_input UNTUK KEMASKINI; >
  • Antaranya, input_pengguna mewakili input pengguna akhir, yang boleh menjadi nilai tunggal, pernyataan atau julat bersyarat, dsb.
  • Berhati-hati apabila menggunakan kunci tuple Penggunaan yang tidak munasabah akan mengurangkan prestasi konkurensi pangkalan data.

Kunci celah

    Kunci celah, juga dipanggil Kunci celah, biasanya digunakan untuk mengelakkan bacaan tidak berulang. Selalunya muncul dalam operasi SQL yang menjangkau berbilang baris pada satu masa.
  1. Contohnya:
SELECT c1 FROM tbl WHERE c1 BETWEEN 10 and 20 FOR UPDATE;

Pada ketika ini, pangkalan data perlu mengunci semua baris dengan nilai c1 antara 10 dan 20. Jenis kunci yang sepadan dipanggil kunci jurang, yang mengunci nilai yang berada dalam jurang tetapi tidak wujud.

Cara menggunakan kunci celah:

  • Gunakan paparan baca hantu (MVCC) untuk menjejaki operasi baca yang sedang berjalan dan sediakan kunci baca peringkat baris atau kunci celah untuk operasi baca masa hadapan.
  • Semakan jurang: Kunci jurang S akan menyemak baris satu demi satu untuk memastikan baris ini tidak dikemas kini atau dipadam sambil mengekalkan "baca boleh berulang".
  • Salah satu isu paling penting dengan kunci jurang dan aksesnya ialah berhati-hati tentang operasi serentak bagi perkara lain.

Ringkasan

Dalam pembangunan sebenar, kita harus memilih jenis kunci yang betul dan menggunakan kunci yang sesuai mengikut keperluan sebenar untuk mengelakkan kebuntuan dan memperbaiki keselarasan sistem, cuba elakkan kemerosotan prestasi sistem. Pelbagai fungsi penguncian yang disediakan oleh MySQL boleh menyelesaikan masalah operasi transaksi atau akses serentak oleh berbilang pengguna.

Pemilihan yang betul bagi mekanisme kunci MySQL yang sesuai boleh meningkatkan prestasi dan keselarasan sistem dengan berkesan, menjadikan aplikasi kami lebih mantap dan boleh dipercayai.

Atas ialah kandungan terperinci Artikel yang memperkenalkan pelaksanaan kunci dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn