Mari bercakap tentang kunci global MySQL

WBOY
Lepaskan: 2022-06-17 13:53:43
ke hadapan
1679 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan isu berkaitan tentang kunci global mengunci seluruh pangkalan data. Selepas kita menambah kunci baca pada pangkalan data, tiada permintaan lain boleh menambah kunci tulis pada pangkalan data Mari kita lihat bersama-sama saya harap ia akan membantu semua orang.

Mari bercakap tentang kunci global MySQL

Pembelajaran yang disyorkan: tutorial video mysql

Niat asal reka bentuk pangkalan data adalah untuk menangani isu konkurensi, sebagai sumber yang dikongsi oleh berbilang pengguna Apabila akses serentak berlaku, pangkalan data perlu mengawal peraturan capaian sumber secara munasabah. Kunci ialah struktur data penting yang digunakan untuk melaksanakan peraturan akses ini.

Mari kita siarkan dahulu gambar rajah klasifikasi umum kunci

Mengikut skop penguncian, kunci dalam MySQL boleh dibahagikan secara kasar kepada kunci global dan kunci meja, kunci baris. Kami akan mempelajari jenis kunci ini terlebih dahulu Dalam artikel ini, kami akan mempelajari tentang kunci global.

Kunci global

Kunci global mengunci seluruh pangkalan data. Selepas kami menambah kunci baca pada pangkalan data, tiada permintaan lain boleh menambah kunci tulis pada pangkalan data Apabila kami menambah kunci tulis pada pangkalan data, tiada permintaan seterusnya boleh menambah kunci baca atau tulis pada pangkalan data.

FTWRL

MySQL menyediakan kaedah untuk menambah kunci baca global, Siram jadual dengan kunci baca (FTWRL). Apabila kita perlu membuat keseluruhan perpustakaan dalam keadaan baca sahaja, kita boleh menggunakan arahan ini Kemudian penyataan berikut bagi utas lain akan disekat: penyata kemas kini data (tambah, padam, ubah suai), penyataan definisi data (termasuk membuat jadual. , mengubah suai struktur jadual, dsb.) dan mengemas kini Penyataan komit untuk transaksi kelas.

Senario penggunaan kunci global

Senario penggunaan kunci global: Buat sandaran logik bagi keseluruhan pangkalan data. Sandaran logik bermakna memilih setiap jadual dalam keseluruhan pangkalan data dan menyimpannya sebagai teks. Maksudnya, kunci global hanya digunakan apabila melaksanakan data sandaran tuan-hamba atau mengimport dan mengeksport data.

Jadi mengapa anda memerlukan kunci global?

Oleh kerana apabila kami membuat sandaran data atau mengimport dan mengeksport data, jika data boleh ditambah, dipadam dan diubah suai pada masa yang sama dalam tempoh ini, ketidakkonsistenan data akan berlaku.

Pada masa lalu, terdapat cara untuk menggunakan FTWRL yang dinyatakan di atas untuk memastikan bahawa tiada urutan lain akan mengemas kini pangkalan data semasa sandaran Nota: Semasa proses sandaran, keseluruhan pustaka berada dalam baca sahaja negeri.

Oleh kerana kunci global berorientasikan pangkalan data ini, menambah kunci global berbunyi sangat berbahaya:

  • Jika kami membuat sandaran pada pangkalan data utama, kemas kini tidak boleh dilakukan semasa tempoh sandaran , dan Pada asasnya semua perniagaan digantung.
  • Jika kita membuat sandaran pada pangkalan data hamba, binlog yang disegerakkan daripada pangkalan data induk semasa tempoh sandaran tidak boleh dilaksanakan, yang akan membawa kepada kelewatan tuan-hamba dan ketidakkonsistenan data.

Bagaimana untuk mengelakkan penguncian

Memandangkan penambahan kunci global mempunyai kesan yang begitu besar, bolehkah kita mengelak daripada mengunci?

Melalui pengenalan di atas, kita tahu bahawa penguncian adalah untuk menyelesaikan masalah ketidakkonsistenan data. Jadi selagi kami dapat menyelesaikan masalah ketidakkonsistenan data, kami tidak perlu menambah kunci global. Terdapat idea sedemikian: jika kita merekodkan log operasi apabila kita memulakan sandaran data, penambahan, pemadaman, pengubahsuaian dan pertanyaan kepada pangkalan data dibenarkan tanpa mengunci semasa proses sandaran, dan semasa proses sandaran, rekod operasi penambahan, pemadaman. , pengubahsuaian dan pertanyaan direkodkan dalam satu Dalam fail log, selepas sandaran kami selesai, kami akan melaksanakan semua operasi dalam fail log dalam tempoh ini. Ini memastikan ketekalan data sebelum dan selepas sandaran.

Untuk meringkaskan, tanpa mengunci, data sandaran dan data utama tidak berada pada titik masa yang logik, dan pandangan ini secara logiknya tidak konsisten. Jika kita memastikan bahawa titik masa logik adalah konsisten, iaitu pandangan logik adalah konsisten, kita boleh memastikan konsistensi data Daripada ini, kita memikirkan tahap pengasingan transaksi yang kita pelajari sebelum ini pandangan yang konsisten.

Terdapat mekanisme dalam InnoDB, enjin lalai MySQL, untuk memastikan ketekalan data. Enjin InnoDB mempunyai fungsi versi syot kilat Fungsi ini dipanggil MVCC kerana MVCC mengekalkan syot kilat versi sejarah Setiap syot kilat sepadan dengan nombor versi transaksi, kami akan memohon nombor versi transaksi mengambil data, anda hanya perlu membaca data dengan nombor versi transaksi yang lebih kecil daripada anda sendiri.

–penguncian perintah transaksi tunggal

Alat sandaran logik rasmi ialah mysqldump. Apabila mysqldump menggunakan parameter –single-transaction, transaksi akan dimulakan sebelum mengimport data untuk memastikan paparan yang konsisten diperoleh. Disebabkan sokongan MVCC, data boleh dikemas kini seperti biasa semasa proses ini.

Fungsi parameter --single-transaction adalah untuk menetapkan tahap pengasingan urus niaga kepada bacaan berulang, iaitu BACA BOLEH DIULANG Ini memastikan semua pertanyaan yang sama dalam transaksi membaca data yang sama, yang secara kasarnya menjamin bahawa dalam Semasa pembuangan, jika benang enjin InnoDB lain mengubah suai data jadual dan menyerahkannya, ia tidak akan memberi kesan kepada data benang pembuangan.

Dan tetapkan DENGAN GAMBAR KONSISTEN ke tahap gambar. Bayangkan jika ia hanya bacaan berulang, maka apabila data tidak dibuang pada permulaan transaksi, utas lain mengubah suai dan menyerahkan data, maka hasil pertanyaan pertama pada masa ini adalah hasil yang dihantar oleh utas lain, dan DENGAN GAMBAR YANG KONSISTEN boleh memastikan bahawa apabila urus niaga dimulakan, hasil pertanyaan pertama ialah data A pada permulaan transaksi Walaupun urutan lain mengubah suai datanya kepada B pada masa ini, hasil pertanyaan itu masih A .

Kaedah transaksi tunggal hanya terpakai kepada perpustakaan yang menggunakan enjin transaksi untuk semua jadual. Dalam proses mysqldump, menambah --single-transaction boleh memastikan data InnoDB benar-benar konsisten Untuk enjin seperti MyISAM yang tidak menyokong transaksi, jika terdapat kemas kini semasa proses sandaran, hanya data terkini yang boleh diperolehi Ini memusnahkan konsistensi sandaran. Pada masa ini, kunci global masih diperlukan, jadi kita masih perlu menggunakan arahan FTWRL.

Tetapan baca sahaja

Kami mungkin juga mempunyai soalan ini, memandangkan keseluruhan perpustakaan adalah baca sahaja, mengapa kita tidak menggunakan set baca sahaja global = benar?

Memang benar kaedah baca sahaja juga boleh meletakkan keseluruhan perpustakaan ke dalam keadaan baca sahaja, tetapi masih disyorkan untuk menggunakan kaedah FTWRL, terutamanya atas dua sebab:

  • Dalam sesetengah sistem, nilai readonly will Ia digunakan untuk logik lain, seperti menentukan sama ada pangkalan data ialah pangkalan data utama atau pangkalan data siap sedia. Oleh itu, mengubah suai pembolehubah global mempunyai kesan yang lebih besar.
  • Terdapat perbezaan dalam mekanisme pengendalian pengecualian. Jika pelanggan memutuskan sambungan secara tidak normal selepas melaksanakan arahan FTWRL, MySQL akan secara automatik melepaskan kunci global dan keseluruhan perpustakaan akan kembali ke keadaan di mana ia boleh dikemas kini seperti biasa.

Selepas menetapkan keseluruhan perpustakaan kepada baca sahaja, jika pengecualian berlaku pada klien, pangkalan data akan kekal dalam keadaan baca sahaja, yang akan menyebabkan keseluruhan perpustakaan berada dalam keadaan tidak boleh ditulis untuk masa yang lama , dengan risiko yang tinggi.

Pembelajaran yang disyorkan: tutorial video mysql

Atas ialah kandungan terperinci Mari bercakap tentang kunci global MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!