Rumah  >  Artikel  >  pangkalan data  >  Apakah halaman kotor mysql?

Apakah halaman kotor mysql?

青灯夜游
青灯夜游asal
2023-04-14 10:41:301451semak imbas

Dalam mysql, apabila kandungan halaman data memori dan halaman data cakera tidak konsisten, halaman memori dipanggil halaman kotor. Senario untuk mengepam halaman kotor: 1. Apabila log buat semula penuh, MySQL akan menggantung semua operasi kemas kini dan menyegerakkan halaman kotor yang sepadan dengan bahagian log ini ke cakera 2. Apabila memori sistem tidak mencukupi, beberapa halaman data memerlukan untuk dihapuskan. Jika halaman kotor adalah halaman kotor, anda mesti menyegerakkan halaman kotor ke cakera 3. MySQL berfikir bahawa apabila sistem melahu, ia akan menyegerakkan data memori ke cakera apabila ada peluang; . Tiada masalah prestasi dalam kes ini.

Apakah halaman kotor mysql?

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Halaman kotor (halaman ingatan)

  • Halaman bersih: data dalam ingatan dan cakera adalah konsisten
  • Halaman kotor: dalam ingatan dan cakera Data tidak konsisten

Mengapa halaman kotor muncul?

Biasanya operasi kemas kini pantas ditulis ke memori dan log. Ia tidak 不会马上同步 pergi ke halaman data cakera Pada masa ini, kandungan halaman data memori dan halaman data cakera tidak konsisten, yang kami panggil 脏页.

Ini melibatkan mekanisme pengurusan memori mysql

Penerangan ringkas tentang mekanisme pengurusan memori

Penimbal mengandungi tiga kategori senarai ini. Mereka ialah: LRUList, FreeList, FlushList.

Apabila pangkalan data baru sahaja dimulakan, 没有数据页 berada dalam senarai LRU. FreeList menyimpan halaman percuma.

  • Apabila halaman perlu dibaca, halaman percuma akan diperolehi daripada FreeList Selepas membaca data, ia akan dimasukkan ke dalam LRUlist
  • Jika tiada halaman percuma dalam. FreeList, Kemudian halaman terakhir dalam senarai LRU dihapuskan mengikut algoritma LRU
  • Apabila halaman dalam LRUlist diubah suai, halaman tersebut menjadi halaman kotor, dan halaman ini juga akan ditambahkan pada FlushList

Nota: Pada masa ini, halaman ini berada dalam LRUlist dan FlushList.

Ringkasan: LRUList (urus halaman yang telah dibaca) dan FreeList (urus halaman percuma) digunakan untuk mengurus ketersediaan halaman (uruskan halaman kotor) digunakan untuk mengurus muat semula halaman kotor

Semasa proses menyegerakkan data halaman kotor ke cakera, jika pernyataan SQL dilaksanakan pada halaman data cakera. Kelajuan pelaksanaan akan menjadi perlahan

Adakah tidak mengapa jika pengubahsuaian dan bacaan data hanya bergantung pada penimbal?

Jika pengubahsuaian dan bacaan data hanya bergantung pada penimbal memori, maka sekali Jika pangkalan data turun, data dalam ingatan akan hilang. Oleh itu, MySQL menggunakan log buat semula yang dinyatakan sebelum ini untuk mencapai pemulihan data selepas dimulakan semula yang tidak normal.

Ringkasnya, sebelum mengemas kini penimbal, tulis log buat semula terlebih dahulu untuk memastikan data dalam penimbal boleh dipulihkan seperti biasa selepas permulaan semula yang tidak normal.

Mengapa halaman kotor mesti dimuat semula

  • Seperti yang dinyatakan di atas, data hanya diletakkan dalam penimbal dan 数据库宕机,内存数据丢失 akan muncul. Jadi ia perlu disiram ke cakera.
  • Jika log buat semula tidak terhingga besar atau mempunyai banyak fail, akan terdapat sejumlah besar operasi pengubahsuaian dalam sistem Sebaik sahaja sistem mati, masa pemulihan akan menjadi sangat lama.

Jadi secara semula jadi, kita mesti menyegarkan semula halaman kotor dalam memori ke cakera mengikut peraturan tertentu Dengan operasi penyegaran, masalah saiz penimbal dan buat semula Masalah log saiz boleh diselesaikan.

  • Penimbal tidak perlu tidak terhingga, kerana ia boleh diteruskan ke cakera
  • Log buat semula tidak perlu menjadi tidak terhingga, kerana sekali berterusan ke cakera, log buat semula yang sepadan Bahagian data itu boleh dikeluarkan.

Terdapat 4 senario berikut untuk memberus halaman kotor

  • Apabila redo log 写满, mysql akan 暂停所有更新 beroperasi dan menyegerak Bahagian log ini sepadan dengan 脏页同步到磁盘.

  • Apabila sistem 内存不足, 淘汰 sebahagian daripada halaman data diperlukan. Jika 脏页 dihapuskan, 先将脏页同步到磁盘 diperlukan.

  • MySQL berpendapat bahawa apabila sistem adalah 空闲, ia akan 同步 memindahkan data memori ke cakera apabila tiada masalah prestasi dalam kes ini.

  • MySQL 正常关闭, MySQL akan memuat naik 内存的脏页都同步到磁盘, supaya apabila MySQL bermula, ia boleh membaca data terus dari cakera, dan kelajuan permulaan akan menjadi sangat pantas. Tiada masalah prestasi dengan ini.

Kesan yang akan ditimbulkannya

Jika log buat semula penuh

Cuba elakkan ia redo log 写满. Jika tidak, kemas kini keseluruhan sistem akan berhenti. 此时写的性能变为 0, anda mesti menunggu log sepadan dengan 脏页同步完成 sebelum ia boleh dikemas kini Ini akan menyebabkan penyataan sql dilaksanakan dengan sangat perlahan.

[Cadangan berkaitan: tutorial video mysql]

Atas ialah kandungan terperinci Apakah halaman kotor mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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
Artikel sebelumnya:Apakah jadual maya Mysql?Artikel seterusnya:Apakah jadual maya Mysql?