Apakah mekanisme MVCC dalam MySQL
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;
Sekarang buka transaksi pertama, transaksi id ialah 1 , laksanakan pernyataan sisipan berikut.
INSERT INTO student VALUES ( 1, "a", 24 );
Kemudian rajah semasa adalah seperti berikut:
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;
Rajah semasa bertukar kepada:
Apabila transaksi ketiga dibuka dan id transaksi yang diberikan ialah 3, laksanakan arahan pengubahsuaian berikut.
UPDATE student SET age = 25 WHERE id = 1;
Rajah menjadi:
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
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
简要的示意图如下:
那么事务在执行快照读时,可以通过以下的规则来确定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中,说明版本对应的事务已经提交,因此是可见的。
如果当前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!

Alat AI Hot

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

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

Undress AI Tool
Gambar buka pakaian secara percuma

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)

Topik panas











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 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.

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.

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.

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.

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 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 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.
