Rumah  >  Artikel  >  pangkalan data  >  Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB

WBOY
WBOYke hadapan
2022-10-10 16:56:282235semak imbas

Artikel ini membawakan anda pengetahuan yang berkaitan tentang mysql, yang terutamanya memperkenalkan kandungan yang berkaitan tentang seni bina enjin storan InnoDB ialah enjin lalai MySQL, sebuah enjin storan yang menyokong keselamatan transaksi , mari kita ambil sama-sama lihat, semoga bermanfaat untuk semua.

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB

Pembelajaran yang disyorkan: tutorial video mysql

Pangkalan data versi MySQL8.x semasa sudah menyokong banyak enjin storan, tetapi secara amnya kami Di sana hanya beberapa yang biasa digunakan Ia adalah mudah untuk membentuk minda tetap dan tidak mudah menggunakan enjin storan lain, sehingga kehilangan banyak fungsi untuk mengoptimumkan storan. Oleh itu, adalah berbaloi untuk mengetahui pemahaman yang jelas tentang fungsi sembilan enjin storan pangkalan data yang disokong pada masa ini. Artikel ini menerangkan dengan jelas fungsi, fungsi dan senario penggunaan lapan enjin storan pangkalan data ini.

Siri artikel ini akan disertakan dalam lajur saya - Belajar Cepat Pelbagai Operasi Pangkalan Data SQL, yang pada asasnya merangkumi semua aspek penggunaan SQL untuk mengendalikan perniagaan harian, analisis pangkalan data pertanyaan biasa dan operasi yang kompleks. Daripada langkah asas membina pangkalan data dan jadual untuk mengendalikan pelbagai operasi pangkalan data yang kompleks, serta penjelasan profesional tentang fungsi SQL biasa, banyak masa dan usaha telah dibelanjakan untuk penciptaan Jika anda mempunyai rakan yang perlu melibatkan diri dalam analisis data atau pembangunan data, saya mengesyorkan melanggan lajur Pelajari pengetahuan yang paling praktikal dan biasa digunakan pada kali pertama. Blog ini agak panjang dan patut dibaca dan diamalkan dengan teliti saya akan memilih bahagian yang terbaik dan menerangkan amalan secara terperinci. Blogger akan mengekalkan catatan blog untuk masa yang lama Jika anda mempunyai sebarang kesilapan atau keraguan, anda boleh menunjukkannya di ruangan komen Terima kasih atas sokongan anda.

1. Enjin storan yang disokong

Masukkan pangkalan data MySQL untuk melihat enjin storan dan anda boleh melihat semua enjin storan yang disokong oleh pangkalan data MySQL:

SHOW ENGINES

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB

Pada masa ini terdapat satu enjin yang tidak disokong oleh Federated Kami hanya perlu jelas mengenai lapan storan pangkalan data yang lain.

Enjin pangkalan data biasa dalam MySQL termasuk MyISAM, InnoDB dan Memory. Jadi mari kita fahami ketiga-tiga enjin ini.

2. Enjin InnoDB

InnoDB ialah enjin lalai MySQL, enjin storan yang menyokong keselamatan transaksi. Data dalam MySQL disimpan pada cakera fizikal, dan pemprosesan data sebenar dilakukan dalam ingatan. Memandangkan kelajuan baca dan tulis cakera adalah sangat perlahan, jika cakera kerap dibaca dan ditulis untuk setiap operasi, prestasi akan menjadi sangat lemah.

Untuk menyelesaikan masalah di atas, InnoDB membahagikan data kepada beberapa halaman, menggunakan halaman sebagai unit asas interaksi antara cakera dan memori Saiz halaman umum ialah 16KB. Dalam kes ini, sekurang-kurangnya 1 halaman data dibaca ke dalam memori atau 1 halaman data ditulis ke cakera pada satu masa. Meningkatkan prestasi dengan mengurangkan bilangan interaksi antara memori dan cakera.

Ini pada asasnya ialah idea reka bentuk cache biasa Secara umumnya, reka bentuk cache pada asasnya dipertimbangkan dari dimensi masa atau dimensi ruang:

  • Dimensi masa: Jika sekeping. data sedang digunakan, kemungkinan besar ia akan digunakan semula dalam tempoh masa yang akan datang. Ia boleh dianggap bahawa caching data hotspot tergolong dalam pelaksanaan idea ini.

  • Dimensi ruang: Jika sekeping data sedang digunakan, terdapat kebarangkalian tinggi bahawa data yang disimpan berdekatan akan turut digunakan tidak lama lagi. Halaman data InnoDB dan cache halaman sistem pengendalian adalah penjelmaan idea ini.

Berikut ialah rajah struktur enjin InnoDB rasmi, yang terbahagi terutamanya kepada dua bahagian: struktur memori dan struktur cakera.

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB

Struktur memori terutamanya merangkumi empat komponen: Buffer Pool, Change Buffer, Adaptive Hash Index dan Log Buffer.

1.Buffer Pool

Buffer Pool terdiri daripada data, indeks, insert buffer, indeks cincang suai, maklumat kunci dan kamus data. Kolam penampan, dirujuk sebagai BP. BP adalah berdasarkan Halaman, dengan saiz lalai 16K Lapisan bawah BP menggunakan struktur data senarai terpaut untuk mengurus Halaman. Apabila InnoDB mengakses rekod jadual dan indeks, mereka akan dicache dalam halaman Halaman Penggunaan kemudian boleh mengurangkan operasi cakera IO dan meningkatkan kecekapan.

Kolam penimbal hanyalah kawasan memori yang menggunakan kelajuan memori untuk mengimbangi kesan kelajuan cakera perlahan pada prestasi pangkalan data. Apabila membaca halaman dalam pangkalan data, halaman yang dibaca daripada cakera mula-mula disimpan dalam kumpulan penimbal. Proses ini dipanggil "FIX" halaman dalam kumpulan penimbal. Pada kali berikutnya halaman yang sama dibaca, mula-mula tentukan sama ada halaman itu berada dalam kumpulan penimbal. Jika ia berada di kolam penampan, halaman tersebut dikatakan terkena di kolam penampan. Baca halaman secara langsung. Jika tidak, halaman pada cakera dibaca. Untuk operasi pengubahsuaian halaman dalam pangkalan data, halaman dalam kumpulan penimbal diubah suai terlebih dahulu, dan kemudian dimuat semula ke cakera pada frekuensi tertentu. Apa yang perlu diperhatikan di sini ialah operasi membilas halaman dari kumpulan penimbal kembali ke cakera tidak dicetuskan setiap kali halaman dikemas kini, tetapi disiram kembali ke cakera melalui mekanisme yang dipanggil Checkpoint. Sekali lagi ini adalah untuk meningkatkan prestasi keseluruhan pangkalan data.

Algoritma LUR Tradisional

Kolam penimbal diuruskan melalui algoritma LRU (Terbaru Digunakan, paling kurang digunakan baru-baru ini), iaitu algoritma yang paling kerap digunakan halaman Di hadapan senarai LRU, dan halaman yang paling kurang digunakan adalah di penghujung senarai LRU Apabila kumpulan penimbal tidak dapat menyimpan halaman yang baru dibaca, halaman di penghujung senarai LRU mula-mula dikeluarkan:

.

(1) halaman Jika ia sudah berada dalam kumpulan penimbal, maka hanya tindakan "bergerak" ke kepala LRU dilakukan, dan tiada halaman dihapuskan

(2) Halaman itu tidak dalam kumpulan penimbal, kecuali untuk "meletakkan" halaman ke dalam kepala LRU, tetapi juga untuk "menghapuskan" halaman ekor LRU;

Tetapi algoritma LUR InnoDB bukan algoritma LUR tradisional.

Terdapat dua masalah di sini:

(1) Kegagalan pra-bacaan;

(2) Pencemaran kolam penampan; -membaca ialah Baca;

Baca ke hadapanMembaca dan menulis cakera bukanlah membaca atas permintaan, tetapi membaca berdasarkan halaman, sekurang-kurangnya satu halaman pada satu masa Data halaman (biasanya 4K), jika data yang akan dibaca pada masa hadapan berada dalam halaman, cakera IO berikutnya boleh ditinggalkan dan kecekapan dipertingkatkan. Akses data biasanya mengikut prinsip "membaca dan menulis tertumpu". Apabila menggunakan beberapa data, terdapat kebarangkalian tinggi bahawa data berdekatan akan digunakan Ini adalah apa yang dipanggil "prinsip setempat", yang menunjukkan bahawa pemuatan awal adalah berkesan dan memang boleh mengurangkan IO cakera.

Kegagalan baca ke hadapanDisebabkan membaca ke hadapan (Read-Ahead), halaman telah dimasukkan ke dalam kumpulan penimbal terlebih dahulu, tetapi pada akhirnya MySQL tidak Membaca data dari halaman dipanggil kegagalan baca ke hadapan.

Untuk mengoptimumkan kegagalan baca ke hadapan, ideanya ialah:

(1) Biarkan halaman yang gagal membaca ke hadapan kekal dalam kumpulan penimbal LRU untuk masa yang sesingkat mungkin;

( 2) Biarkan halaman yang sebenarnya dibaca dialihkan ke kepala kolam penampan LRU

untuk memastikan data panas yang sebenarnya dibaca kekal dalam kolam penimbal selama lamanya; seboleh mungkin.

Kaedah khusus ialah:

(1) Bahagikan LRU kepada dua bahagian:

Cenozoic (subsenarai baharu)

Subsenarai lama )

(2) Penghujung generasi baru dan lama disambungkan, iaitu: ekor generasi baru disambungkan kepada ketua generasi lama;

(3) Halaman baru (contohnya , oleh Apabila halaman prabaca ditambahkan pada kumpulan penimbal, ia hanya ditambahkan pada ketua generasi lama:

Jika data sebenarnya dibaca (prabaca berjaya), ia akan ditambahkan pada ketua generasi baharu

Jika data belum dibaca, ia akan dihapuskan daripada kumpulan penimbal lebih awal daripada "halaman data panas" dalam generasi baharu

versi LRU yang lebih baik dalam generasi baru dan lama masih tidak dapat menyelesaikan masalah pencemaran kolam penampan.

2.Penimbal Log

Penimbal Log digunakan untuk cache buat semula log.

InnoDB mempunyai dua log yang sangat penting: buat asal log dan buat semula log

(1) Melalui buat asal log, anda boleh melihat versi terdahulu data, melaksanakan MVCC atau transaksi rollback dan fungsi lain.

(2) Log buat semula digunakan untuk memastikan ketahanan transaksi.

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDBBuffer log buat semula ialah kawasan storan memori yang digunakan untuk menyimpan data untuk ditulis ke fail log pada cakera. Saiz penimbal log ditakrifkan oleh pembolehubah innodb_log_buffer_size, dan saiz lalai ialah 16MB.

Kandungan penimbal log disiram secara berkala ke cakera. Penampan log yang lebih besar membolehkan transaksi besar dijalankan tanpa data log semula ditulis ke cakera sebelum transaksi dilakukan. Oleh itu, jika terdapat transaksi yang mengemas kini, memasukkan atau memadam banyak baris, meningkatkan saiz penimbal log boleh menjimatkan I/O cakera.

innodb_flush_log_at_trx_commit: Mengawal cara kandungan penimbal log ditulis dan disiram ke cakera.

innodb_flush_log_at_timeout: Kawal kekerapan muat semula log.

Anda perlu memerhati transaksi jika I/O cakera menyebabkan isu prestasi, seperti transaksi yang melibatkan banyak entri BLOB. Penampan log InnoDB disiram ke cakera apabila ia penuh, jadi meningkatkan saiz penimbal boleh mengurangkan I/O.

Bilangan lalai fail log ialah dua: ib_logfile0 dan ib_logfile1.

Log mempunyai saiz tetap, saiz lalai bergantung pada versi MySQL.

3.Indeks Cincang Suai

Indeks Cincang Suai Suai Indeks cincang suai ialah struktur storan pasangan nilai kunci yang menyimpan rekod di mana halaman panas berada. Enjin storan InnoDB secara automatik mencipta indeks cincang untuk halaman tertentu berdasarkan kekerapan dan corak akses.

Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDBGambar di atas ialah perbezaan antara indeks B-tree dan indeks cincang suai. Lumpuhkan atau dayakan ciri ini melalui parameter innodb_adaptive_hash_index, yang didayakan secara lalai.

4.Tukar Penampan

Tukar Penampan: Data dalam MySQL dibahagikan kepada dua bahagian: memori dan cakera menyimpan halaman data panas dan halaman indeks dalam kumpulan penimbal untuk mengurangkan bacaan cakera; Penampan ialah satu cara untuk memudahkan penulisan cakera.

Apabila halaman data perlu dikemas kini, ia dikemas kini secara langsung jika halaman data berada dalam ingatan. Jika halaman data tiada dalam ingatan. Tanpa menjejaskan ketekalan data, InooDB akan cache operasi kemas kini ini dalam penimbal perubahan, supaya tidak perlu membaca halaman data ini daripada cakera. Apabila pertanyaan seterusnya perlu mengakses halaman data ini, baca halaman data ke dalam memori, dan kemudian lakukan operasi yang berkaitan dengan halaman ini dalam penimbal perubahan. Dengan cara ini, ketepatan logik data dapat dipastikan.

Walaupun namanya dipanggil change buffer, ia sebenarnya data yang boleh dikekalkan. Dengan kata lain, penimbal perubahan mempunyai salinan dalam ingatan dan juga akan ditulis ke cakera (ibdata).

Proses penggabungan operasi dalam penimbal perubahan ke halaman data asal dan mendapatkan hasil terkini dipanggil gabungan. Situasi berikut akan mencetuskan cantuman:

  • Akses halaman data ini;

  • Apabila kumpulan penimbal pangkalan data tidak mencukupi;
  • Apabila pangkalan data ditutup seperti biasa;
  • Apabila buat semula log penuh;
  • Penimbal perubahan bermakna apabila halaman indeks biasa bukan unik tidak berada dalam kumpulan penimbal dan operasi tulis dilakukan pada halaman, penimbal perubahan rekod akan buffer dahulu, dan kemudian penimbal perubahan akan ditukar apabila data masa hadapan dibaca Teknologi dalam operasi bergabung ke halaman data asal. Sebelum MySQL 5.5, ia dipanggil insert buffer (insert buffer), dan ia hanya dioptimumkan untuk insert sekarang ia juga sah untuk delete dan update, dan ia dipanggil write buffer (change buffer).
  • Pembelajaran yang disyorkan:

    tutorial video mysql

Atas ialah kandungan terperinci Penjelasan terperinci enjin storan MySQL tentang seni bina InnoDB. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam