Jadual Kandungan
1. Gambaran Keseluruhan:
2. Apakah itu Buat asal log
3. Lajur tersembunyi bagi baris
4. Buat asal rangkaian versi log
5. Perihal ReadView
ReadView mengandungi parameter penting berikut:
Rumah pangkalan data tutorial mysql Apakah mekanisme MVCC dalam MySQL

Apakah mekanisme MVCC dalam MySQL

Jun 03, 2023 am 09:41 AM
mysql mvcc

1. Gambaran Keseluruhan:

MVCC, nama penuhnya ialah Kawalan Pertukaran Berbilang Versi, iaitu kawalan penukaran berbilang versi. MVCC ialah kaedah kawalan berbilang konkurensi Ia biasanya digunakan dalam sistem pengurusan pangkalan data untuk mencapai akses serentak kepada pangkalan data dan untuk melaksanakan memori transaksi dalam bahasa pengaturcaraan.
Kami tahu bahawa MySql bertukar daripada enjin storan MyISAM kepada enjin storan InnoDB selepas 5.5, terutamanya kerana InnoDB menyokong urus niaga, jadi apabila berbilang urutan dilaksanakan pada masa yang sama, masalah serentak mungkin berlaku. Pada masa ini, kaedah yang boleh mengawal konkurensi mungkin muncul dan MVCC memainkan peranan ini.

MVCC dilaksanakan terutamanya oleh rangkaian versi log asal dan ReadView.

2. Apakah itu Buat asal log

  • Buat asal log digunakan terutamanya untuk memulihkan data asal apabila transaksi ditarik balik.

  • Apabila mysql melaksanakan sql, ia akan menyimpan log logik yang bertentangan dengan hari itu ke log buat asal. Oleh itu, apa yang direkodkan dalam log batal juga adalah log logik.

  • Tetapi apabila mysql melaksanakan pernyataan Sisipkan, id kunci utama yang dimasukkan kali ini akan direkodkan dalam log buat asal. Apabila transaksi ditarik balik, padam memadamkan id ini.

  • Apabila melaksanakan pernyataan kemas kini, MySQL akan menyimpan data sebelum pengubahsuaian dalam log buat asal. Apabila transaksi ditarik balik, kemas kini dilakukan sekali lagi untuk mendapatkan data asal.

  • Apabila MySQL melaksanakan pernyataan padam, data sebelum pemadaman akan disimpan dalam log buat asal. Apabila transaksi ditarik balik, laksanakan sisip sekali lagi dan masukkan data asal.

  • Empat ciri utama dalam pangkalan data - atomicity, iaitu, urus niaga tidak boleh dibahagikan, sama ada semua berjaya atau semua gagal, dan lapisan bawah dicapai dengan log asal. Apabila pelaksanaan penyata tertentu gagal, penyata transaksi sebelumnya akan ditarik balik.

3. Lajur tersembunyi bagi baris

  • Dalam setiap baris pangkalan data, selain menyimpan data sebenar, terdapat juga 3 tersembunyi lajur Lajur: row_id, trx_id dan roll_pointer

  • row_id, nombor baris:

Jika jadual semasa mempunyai kunci utama integer taip, kemudian row_id Nilai ialah nilai kunci utama
Jika tiada kunci utama jenis integer, MySQL akan memilih indeks unik jenis integer bukan kosong sebagai row_id dalam susunan medan
Jika tiada ditemui, nombor yang berkembang secara automatik akan dibuat Integer sebagai row_id

  • trx_id, nombor transaksi:

Apabila transaksi mula dilaksanakan, MySQL akan Transaksi diberikan ID transaksi yang meningkat secara global.
Apabila transaksi menambah, mengubah suai, memadam, dsb. pada operasi semasa, ia akan merekodkan ID transaksinya sendiri ke dalam trx_id.

  • roll_pointer, rollback pointer:

Apabila transaksi menukar data semasa, data lama akan direkodkan dalam Dalam log buat asal, data ditulis pada baris semasa dan roll_pointer semasa menghala ke log buat asal tadi, jadi roll_pointer boleh digunakan untuk mencari versi baris sebelumnya.
Apabila terdapat urus niaga yang menukar baris, buat asal log akan dijana secara berterusan dan rantaian versi log buat asal akhirnya akan terbentuk.

4. Buat asal rangkaian versi log

Pada mulanya, kami menggunakan pernyataan berikut untuk mencipta jadual pelajar

CREATE TABLE `student` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR ( 255 ) NOT NULL,
	`age` INT ( 11 ) NOT NULL,
  PRIMARY KEY ( `id` ) USING BTREE 
) ENGINE = INNODB;
Salin selepas log masuk

Sekarang buka transaksi pertama, transaksi id ialah 1 , laksanakan pernyataan sisipan berikut.

INSERT INTO student VALUES ( 1, "a", 24 );
Salin selepas log masuk

Kemudian rajah semasa adalah seperti berikut:

Apakah mekanisme MVCC dalam MySQL

Oleh kerana data baru dimasukkan, log buat asal yang ditunjukkan oleh penunjuk_gulungannya kosong.

Kemudian buka transaksi kedua, ID transaksi yang ditetapkan ialah 2, dan laksanakan arahan pengubahsuaian berikut.

UPDATE student SET NAME = 'b' WHERE id = 1;
Salin selepas log masuk

Rajah semasa bertukar kepada:

Apakah mekanisme MVCC dalam MySQL

Apabila transaksi ketiga dibuka dan id transaksi yang diberikan ialah 3, laksanakan arahan pengubahsuaian berikut.

UPDATE student SET age = 25 WHERE id = 1;
Salin selepas log masuk

Rajah menjadi:

Apakah mekanisme MVCC dalam MySQL

Apabila setiap transaksi menukar baris, log buat asal akan dihasilkan untuk menyimpan versi sebelumnya daripada roll_pointer ke log batal yang baru dijana.
Oleh itu, roll_pointer boleh menyambungkan versi berbeza siri buat asal log ini untuk membentuk rantaian versi log asal.

5. Perihal ReadView

Pertama sekali, anda perlu memahami bacaan syot kilat dan bacaan semasa
Bacaan syot kilat: pertanyaan pilih mudah, iaitu, ia tidak termasuk kunci … dalam mod kongsi, pilih &hellip untuk kemas kini, anda boleh membaca versi sejarah data.
Bacaan semasa: Penyataan berikut adalah semua bacaan semasa Versi terkini sentiasa dibaca dan versi terkini dibaca dikunci.

select ... lock in share mode
select ... for update
insert
update
delete
Salin selepas log masuk

Apabila transaksi melakukan setiap bacaan syot kilat atau apabila transaksi melakukan bacaan syot kilat buat kali pertama, paparan yang konsisten, iaitu ReadView, akan dijana.
Fungsi ReadView adalah untuk menentukan data dalam rantaian versi log asal boleh dilihat kepada transaksi semasa.

ReadView mengandungi parameter penting berikut:

  • m_ids

    • Pada masa ReadView dicipta, A koleksi semua ID transaksi tidak komited dalam mysql.

  • min_trx_id

    • m_ids中的最小值

  • max_trx_id

    • mysql即将为下一个事务分配的事务id,并不是m_ids中的最大值。

  • creator_trx_id

    • 即创建此ReadView的事务id

简要的示意图如下:

Apakah mekanisme MVCC dalam MySQL

那么事务在执行快照读时,可以通过以下的规则来确定undo log版本链上的哪个版本数据可见。

  • 如果当前undo log的版本的trx_id

  • 如果当前undo log的版本的trx_id≥max_trx_id,说明该版本对应的事务在生成ReadView之后才开始的,因此是不可见的。

  • 如果当前undo log的版本的trx_id∈[min_trx_id,max_trx_id),如果在这个范围里,还要判断trx_id是否在m_ids中:

  在m_ids中,说明版本对应的事务未提交,因此是不可见的。

  不在m_ids中,说明版本对应的事务已经提交,因此是可见的。
Salin selepas log masuk
  • 如果当前undo log的版本的trx_id=creator_trxt_id,说明事务正在访问自己修改的数据,因此是可见的。

  • 当undo log版本链表的头结点数据被判定为不可见时,则利用roll_pointer找到上一个版本,再进行判断。如果整个链表中都没有找到可见的数据,则代表当前的查询找不到数据。

Atas ialah kandungan terperinci Apakah mekanisme MVCC dalam MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1672
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
Contoh Pengenalan Laravel Contoh Pengenalan Laravel Apr 18, 2025 pm 12:45 PM

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

MySQL dan PHPMyAdmin: Ciri dan Fungsi Teras MySQL dan PHPMyAdmin: Ciri dan Fungsi Teras Apr 22, 2025 am 12:12 AM

MySQL dan phpmyadmin adalah alat pengurusan pangkalan data yang kuat. 1) MySQL digunakan untuk membuat pangkalan data dan jadual, dan untuk melaksanakan pertanyaan DML dan SQL. 2) Phpmyadmin menyediakan antara muka intuitif untuk pengurusan pangkalan data, pengurusan struktur meja, operasi data dan pengurusan kebenaran pengguna.

Mysql vs Bahasa Pengaturcaraan Lain: Perbandingan Mysql vs Bahasa Pengaturcaraan Lain: Perbandingan Apr 19, 2025 am 12:22 AM

Berbanding dengan bahasa pengaturcaraan lain, MySQL digunakan terutamanya untuk menyimpan dan mengurus data, manakala bahasa lain seperti Python, Java, dan C digunakan untuk pemprosesan logik dan pembangunan aplikasi. MySQL terkenal dengan prestasi tinggi, skalabilitas dan sokongan silang platform, sesuai untuk keperluan pengurusan data, sementara bahasa lain mempunyai kelebihan dalam bidang masing-masing seperti analisis data, aplikasi perusahaan, dan pengaturcaraan sistem.

Kaedah pemasangan kerangka Laravel Kaedah pemasangan kerangka Laravel Apr 18, 2025 pm 12:54 PM

Ringkasan Artikel: Artikel ini menyediakan arahan langkah demi langkah terperinci untuk membimbing pembaca tentang cara memasang rangka kerja Laravel dengan mudah. Laravel adalah rangka kerja PHP yang kuat yang mempercepat proses pembangunan aplikasi web. Tutorial ini merangkumi proses pemasangan dari keperluan sistem untuk mengkonfigurasi pangkalan data dan menyediakan penghalaan. Dengan mengikuti langkah -langkah ini, pembaca dapat dengan cepat dan cekap meletakkan asas yang kukuh untuk projek Laravel mereka.

Terangkan tujuan kunci asing di MySQL. Terangkan tujuan kunci asing di MySQL. Apr 25, 2025 am 12:17 AM

Di MySQL, fungsi kunci asing adalah untuk mewujudkan hubungan antara jadual dan memastikan konsistensi dan integriti data. Kekunci asing mengekalkan keberkesanan data melalui pemeriksaan integriti rujukan dan operasi cascading. Perhatikan pengoptimuman prestasi dan elakkan kesilapan biasa apabila menggunakannya.

Bandingkan dan kontras MySQL dan Mariadb. Bandingkan dan kontras MySQL dan Mariadb. Apr 26, 2025 am 12:08 AM

Perbezaan utama antara MySQL dan MariaDB adalah prestasi, fungsi dan lesen: 1. MySQL dibangunkan oleh Oracle, dan Mariadb adalah garpu. 2. MariaDB boleh melakukan lebih baik dalam persekitaran beban tinggi. 3.MariADB menyediakan lebih banyak enjin dan fungsi penyimpanan. 4.MYSQL mengamalkan lesen dua, dan MariaDB adalah sumber terbuka sepenuhnya. Infrastruktur yang sedia ada, keperluan prestasi, keperluan fungsional dan kos lesen perlu diambil kira apabila memilih.

SQL vs MySQL: menjelaskan hubungan antara kedua -dua SQL vs MySQL: menjelaskan hubungan antara kedua -dua Apr 24, 2025 am 12:02 AM

SQL adalah bahasa standard untuk menguruskan pangkalan data relasi, manakala MySQL adalah sistem pengurusan pangkalan data yang menggunakan SQL. SQL mentakrifkan cara untuk berinteraksi dengan pangkalan data, termasuk operasi CRUD, sementara MySQL melaksanakan standard SQL dan menyediakan ciri -ciri tambahan seperti prosedur dan pencetus yang disimpan.

MySQL: Pangkalan Data, Phpmyadmin: Antara Muka Pengurusan MySQL: Pangkalan Data, Phpmyadmin: Antara Muka Pengurusan Apr 29, 2025 am 12:44 AM

MySQL dan phpmyadmin boleh diuruskan dengan berkesan melalui langkah -langkah berikut: 1. Buat dan hapus pangkalan data: hanya klik phpmyadmin untuk diselesaikan. 2. Mengurus Jadual: Anda boleh membuat jadual, mengubahsuai struktur, dan menambah indeks. 3. Operasi Data: Menyokong memasukkan, mengemas kini, memadam data dan melaksanakan pertanyaan SQL. 4. Data Import dan Eksport: Menyokong SQL, CSV, XML dan format lain. 5. Pengoptimuman dan Pemantauan: Gunakan arahan yang boleh dioptimumkan untuk mengoptimumkan jadual dan gunakan penganalisis pertanyaan dan alat pemantauan untuk menyelesaikan masalah prestasi.

See all articles