


Analisis ringkas syot kilat dalam MVCC dan lihat cara syot kilat berfungsi?
Artikel ini akan membawa anda memahami syot kilat dalam MVCC dan melihat cara syot kilat berfungsi dalam MVCC? Semoga ia dapat membantu semua orang!
MVCC
Dalam MySQL (enjin storan innodb), sebenarnya, setiap rekod akan merekodkan operasi rollback pada masa yang sama apabila ia dikemas kini. Nilai terkini pada rekod boleh diperoleh dengan menggulung semula nilai keadaan sebelumnya.
Andaikan nilai ditukar daripada 1 kepada 2, 3 dan 4 dalam urutan, akan terdapat rekod yang serupa dengan yang berikut dalam log putar balik.
Nilai semasa ialah 4, tetapi apabila menanyakan rekod ini, urus niaga bermula pada masa yang berbeza akan mempunyai paparan baca yang berbeza. Seperti yang anda lihat dalam rajah, dalam paparan A, B, dan C, nilai rekod ini masing-masing adalah 1, 2, dan 4 Rekod yang sama boleh wujud dalam berbilang versi dalam sistem, iaitu berbilang-. kawalan konkurensi versi (MVCC) pangkalan data ). Untuk paparan baca A, untuk mendapatkan 1, nilai semasa mesti diperolehi dengan melaksanakan semua operasi rollback dalam rajah.
Bagaimanakah InnoDB mentakrifkan 'snapshot'?
Setiap transaksi dalam InnoDB mempunyai ID transaksi unik, dipanggil id transaksi. Ia digunakan pada sistem urus niaga InnoDB pada permulaan urus niaga, dan meningkat secara ketat mengikut susunan permohonan.
Dan setiap baris data juga mempunyai berbilang versi. Setiap kali transaksi mengemas kini data, versi data baharu akan dijana dan id transaksi akan diberikan kepada ID transaksi versi data ini, direkodkan sebagai trx_id baris. Pada masa yang sama, versi data lama perlu dikekalkan, dan dalam versi data baharu, perlu ada maklumat yang boleh diperoleh secara langsung.
Dalam erti kata lain, satu baris rekod dalam jadual data sebenarnya mungkin mempunyai berbilang versi (baris) dan setiap versi mempunyai trx_id barisnya sendiri.
Mengikut takrifan boleh dibaca berulang, Apabila transaksi bermula, anda boleh melihat hasil semua transaksi yang dilakukan. Tetapi kemudian, semasa urus niaga ini dilaksanakan, kemas kini daripada urus niaga lain tidak dapat dilihat olehnya.
Oleh itu, transaksi hanya perlu mengisytiharkan apabila bermula, "Berdasarkan saat saya mula, jika versi data dijana sebelum saya mula, ia akan dikenali; jika saya mula Jika ia dijana nanti, saya tidak akan mengenalinya. Saya perlu mencari versi sebelumnya." Sudah tentu, jika "versi sebelumnya" tidak kelihatan sama ada, anda perlu terus melihat ke hadapan. Selain itu, jika data dikemas kini oleh transaksi itu sendiri, ia masih perlu mengenalinya.
Dari segi pelaksanaan, InnoDB membina tatasusunan untuk setiap transaksi untuk menyimpan semua ID transaksi yang sedang "aktif" pada masa transaksi dimulakan. "Aktif" bermaksud bahawa ia telah dimulakan tetapi masih belum diserahkan.
Nilai minimum ID transaksi dalam tatasusunan direkodkan sebagai paras air rendah, dan nilai maksimum ID transaksi yang telah dibuat dalam sistem semasa ditambah 1 direkodkan sebagai paras air yang tinggi.
Tatasusunan paparan ini membahagikan semua baris trx_id kepada beberapa situasi berbeza.
Dengan cara ini, untuk saat permulaan transaksi semasa, versi data baris trx_id mempunyai kemungkinan berikut:
Jika ia jatuh di bahagian hijau, ini bermakna versi ini adalah transaksi yang komited atau dijana oleh transaksi semasa itu sendiri, dan data ini boleh dilihat; bahagian, ini bermakna versi ini Ia dijana oleh transaksi yang dimulakan pada masa hadapan dan pastinya tidak kelihatan
Jika ia jatuh di bahagian kuning, ia termasuk dua situasi
- a. Jika baris trx_id berada dalam tatasusunan, ini bermakna versi ini dijana oleh transaksi yang belum diserahkan dan tidak kelihatan b dalam tatasusunan, ini bermakna versi ini adalah transaksi yang telah diserahkan, boleh dilihat.
Kemudian ID transaksi A ialah 100Contohnya:
sesi A memulakan transaksi A. Sebelum transaksi A bermula, terdapat tiga transaksi aktif dalam sistem, dengan ID 90 93 95.
Pada masa ini, tatasusunan pandangan untuk transaksi A adalah seperti ini [90 93 95 100], di mana paras air rendah ialah 90 dan paras air tinggi ialah 100 1= 101;
Kini transaksi A mula membaca data
- Jika anda membaca bahawa ID ialah 104, iaitu lebih besar daripada tanda air tinggi 101, ini bermakna versi ini dijana oleh transaksi yang dimulakan pada masa hadapan dan pastinya tidak kelihatan
- Anda membaca bahawa ID ialah 88, iaitu kurang daripada paras air rendah 90, bermakna versi ini adalah transaksi yang diserahkan atau dijana oleh transaksi semasa itu sendiri
- baca bahawa ID ialah 94, iaitu antara paras air rendah dan masa paras air tinggi, tetapi tidak berada dalam tatasusunan [90 93 95 100], ini bermakna versi ini dijana oleh transaksi yang telah diserahkan dan. kelihatan.
- Saya membaca bahawa ID ialah 93, iaitu antara paras air rendah dan paras air tinggi Tatasusunan [90 93 95 100] menunjukkan bahawa versi ini dijana oleh transaksi yang belum dilakukan. dan tidak kelihatan;
Peraturan penghakiman ini diterjemahkan secara langsung daripada logik kod, tetapi seperti yang anda lihat, ia menyusahkan untuk digunakan untuk keterlihatan analisis daging manusia.
Jadi, izinkan saya menterjemahkannya untuk anda. Untuk versi data, untuk paparan transaksi, selain kemas kininya sendiri sentiasa kelihatan, terdapat tiga situasi:
-
versi tidak komited dan tidak kelihatan; 🎜>
Versi telah diserahkan, tetapi ia telah diserahkan selepas paparan dibuat, jadi ia tidak kelihatan - Versi telah diserahkan, dan ia telah diserahkan sebelum; paparan telah dibuat, jadi ia boleh dilihat.
- [Cadangan berkaitan: tutorial video mysql
Atas ialah kandungan terperinci Analisis ringkas syot kilat dalam MVCC dan lihat cara syot kilat berfungsi?. 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

AI Hentai Generator
Menjana ai hentai secara percuma.

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



Penyederhanaan Integrasi Data: AmazonRDSMYSQL dan Integrasi Data Integrasi Zero ETL Redshift adalah di tengah-tengah organisasi yang didorong oleh data. Proses tradisional ETL (ekstrak, menukar, beban) adalah kompleks dan memakan masa, terutamanya apabila mengintegrasikan pangkalan data (seperti Amazonrdsmysql) dengan gudang data (seperti redshift). Walau bagaimanapun, AWS menyediakan penyelesaian integrasi ETL sifar yang telah mengubah keadaan ini sepenuhnya, menyediakan penyelesaian yang mudah, hampir-sebenar untuk penghijrahan data dari RDSMYSQL ke redshift. Artikel ini akan menyelam ke integrasi RDSMYSQL Zero ETL dengan redshift, menjelaskan bagaimana ia berfungsi dan kelebihan yang dibawa kepada jurutera dan pemaju data.

MySQL boleh mengendalikan pelbagai sambungan serentak dan menggunakan multi-threading/multi-pemprosesan untuk menetapkan persekitaran pelaksanaan bebas kepada setiap permintaan pelanggan untuk memastikan bahawa mereka tidak terganggu. Walau bagaimanapun, bilangan sambungan serentak dipengaruhi oleh sumber sistem, konfigurasi MySQL, prestasi pertanyaan, enjin penyimpanan dan persekitaran rangkaian. Pengoptimuman memerlukan pertimbangan banyak faktor seperti tahap kod (menulis SQL yang cekap), tahap konfigurasi (menyesuaikan max_connections), tahap perkakasan (meningkatkan konfigurasi pelayan).

Apabila MySQL mengubahsuai struktur jadual, kunci metadata biasanya digunakan, yang boleh menyebabkan jadual dikunci. Untuk mengurangkan kesan kunci, langkah -langkah berikut boleh diambil: 1. Simpan jadual yang tersedia dengan DDL dalam talian; 2. Melakukan pengubahsuaian kompleks dalam kelompok; 3. Beroperasi semasa tempoh kecil atau luar puncak; 4. Gunakan alat PT-OSC untuk mencapai kawalan yang lebih baik.

1. Gunakan indeks yang betul untuk mempercepatkan pengambilan data dengan mengurangkan jumlah data yang diimbas memilih*frommployeesWherElast_name = 'Smith'; Jika anda melihat lajur jadual beberapa kali, buat indeks untuk lajur tersebut. Jika anda atau aplikasi anda memerlukan data dari pelbagai lajur mengikut kriteria, buat indeks komposit 2. Elakkan pilih * Hanya lajur yang diperlukan, jika anda memilih semua lajur yang tidak diingini, ini hanya akan memakan lebih banyak pelayan dan menyebabkan pelayan melambatkan pada masa yang tinggi atau kekerapan misalnya, jadual anda

Kunci utama MySQL tidak boleh kosong kerana kunci utama adalah atribut utama yang secara unik mengenal pasti setiap baris dalam pangkalan data. Jika kunci utama boleh kosong, rekod tidak dapat dikenal pasti secara unik, yang akan membawa kepada kekeliruan data. Apabila menggunakan lajur integer sendiri atau UUIDs sebagai kunci utama, anda harus mempertimbangkan faktor-faktor seperti kecekapan dan penghunian ruang dan memilih penyelesaian yang sesuai.

MySQL tidak boleh berjalan secara langsung di Android, tetapi ia boleh dilaksanakan secara tidak langsung dengan menggunakan kaedah berikut: menggunakan pangkalan data ringan SQLite, yang dibina di atas sistem Android, tidak memerlukan pelayan yang berasingan, dan mempunyai penggunaan sumber kecil, yang sangat sesuai untuk aplikasi peranti mudah alih. Sambungkan jauh ke pelayan MySQL dan sambungkan ke pangkalan data MySQL pada pelayan jauh melalui rangkaian untuk membaca dan menulis data, tetapi terdapat kelemahan seperti kebergantungan rangkaian yang kuat, isu keselamatan dan kos pelayan.

MySQL boleh mengembalikan data JSON. Fungsi JSON_EXTRACT mengekstrak nilai medan. Untuk pertanyaan yang kompleks, pertimbangkan untuk menggunakan klausa WHERE untuk menapis data JSON, tetapi perhatikan kesan prestasinya. Sokongan MySQL untuk JSON sentiasa meningkat, dan disyorkan untuk memberi perhatian kepada versi dan ciri terkini.

Sebab utama mengapa anda tidak boleh log masuk ke MySQL sebagai akar adalah masalah kebenaran, ralat fail konfigurasi, kata laluan tidak konsisten, masalah fail soket, atau pemintasan firewall. Penyelesaiannya termasuk: periksa sama ada parameter pengikat di dalam fail konfigurasi dikonfigurasi dengan betul. Semak sama ada kebenaran pengguna root telah diubahsuai atau dipadam dan ditetapkan semula. Sahkan bahawa kata laluan adalah tepat, termasuk kes dan aksara khas. Semak tetapan dan laluan kebenaran fail soket. Semak bahawa firewall menyekat sambungan ke pelayan MySQL.
