Rumah > Artikel > pangkalan data > Apakah keseluruhan proses melaksanakan pernyataan dalam Mysql?
Seni bina logik Mysql adalah seperti berikut.
Operasi yang tidak berkaitan dengan enjin storan diselesaikan pada lapisan Pelayan, dan lapisan enjin storan bertanggungjawab untuk akses data.
Berikut akan memperkenalkan fungsi setiap langkah mengikut proses dalam rajah di atas Di sini kita mengambil pertanyaan rekod sebagai contoh.
Langkah ini terutamanya untuk mengurus sambungan dan pengesahan kebenaran.
bertanggungjawab untuk menguruskan sambungan pelanggan, seperti mysql -u root -p
, yang dilakukan antara klien dan penyambung Sambungan dibahagikan kepada sambungan panjang dan sambungan pendek. Adalah disyorkan untuk menggunakan sambungan panjang kerana mewujudkan sambungan adalah proses yang agak rumit. Walau bagaimanapun, sambungan panjang juga mempunyai ruang untuk pengoptimuman, iaitu, jika terdapat terlalu banyak sambungan panjang, lebih banyak memori akan diduduki apabila operasi pertanyaan besar dilaksanakan.
Selepas sambungan diwujudkan, penyambung akan menentukan kebenaran pengguna, dan kemudian operasi pengguna akan ditentukan berdasarkan kebenaran.
Langkah ini terutamanya analisis leksikal dan analisis sintaks.
Analisis leksikal digunakan terutamanya untuk menentukan perkara yang pengguna mahu lakukan, contohnya, pilih cara untuk membuat pertanyaan.
Analisis tatabahasa adalah terutamanya untuk menentukan sama ada SQL yang dimasukkan oleh pengguna mematuhi sintaks Mysql.
Selepas penganalisis, Mysql sudah tahu apa yang pengguna mahu lakukan, tetapi untuk pernyataan SQL yang sama, mungkin terdapat banyak cara untuk melaksanakannya dalam Pelaksanaan Mysql dan kecekapan adalah juga berbeza.
Dalam langkah pengoptimuman, mysql perlu menentukan cara melaksanakan untuk kecekapan optimum.
Langkah ini terutamanya untuk mengendalikan enjin dan mengembalikan hasil. Kendalikan lapisan enjin storan untuk melintasi jadual data, cari data yang memenuhi kriteria dan kembalikan kepada pelanggan.
Sama seperti pernyataan pertanyaan SQL, Mysql juga perlu melalui penyambung, penganalisis, pengoptimum, pelaksana, dan enjin storan adalah. digunakan untuk mengakses data.
Bezanya kenyataan kemas kini perlu melibatkan dua modul log penting, buat semula log dan binlog
Perniagaan restoran sedang berkembang pesat, tetapi sebagai sebuah restoran, ia tidak dapat dielakkan untuk mempunyai akaun kredit dan pembayaran balik hutang setiap hari.
Jika jumlah pemiutang dan pembayar balik yang ramai, bos tidak akan dapat menggunakan papan merah jambu untuk merekodkan rekod kredit sebulan.
Jadi bos terfikir untuk menulis semua rekod kredit pada lejar, dan apa yang tertulis di papan merah jambu adalah untuk jangka masa yang singkat Selepas keluar kerja, gunakan papan merah jambu untuk mendamaikan lejar.
Dalam contoh ini, papan merah jambu adalah redo log
, dan lejar adalah rekod dalam mysql Mari kita gunakan analogi pembayaran balik hutang untuk membandingkan proses kemas kini mysql ia dalam mysql
Kecekapan rekod ini sangat rendah, jadi idea mysql adalah konsisten dengan bos ini Operasi kemas kini mula-mula diletakkan dalam redo log
, dan kemudian perlahan-lahan dihadam selepas beberapa ketika.
Idea ini dipanggil teknologi WAL, iaitu teknologi Write Ahead Logging
Log ditulis dahulu dan kemudian cakera ditulis.
Bos mesti hentikan apa yang dia buat jika papan merah jambu sudah penuh dan bos belum keluar kerja lagi. Log buat semula dalam mysql boleh merekodkan sejumlah 4GB operasi
Apabila pos tulis menyusul check point
, bos mysql perlu berurusan dengan log buat semula.
Selain itu, dengan kegigihan redo log
, pangkalan data tidak akan kehilangan log walaupun ia dimulakan semula secara tidak normal. Ini adalah mekanisme crash saf
e, tetapi perlu diingatkan bahawa log semula ialah storan innodb. enjin Unik.
Binlog ialah log lapisan pelayan dan boleh digunakan pada semua enjin storan.
Jadi oleh kerana terdapat binlog, mengapa kita perlu mencipta log semula yang eksklusif kepada enjin storan innodb?
Disebabkan mysql tidak mempunyai enjin innodb pada mulanya, tetapi enjin myisam, yang menggunakan binlog, tetapi binlog terhad untuk mengarkib dan tidak mempunyai mekanisme selamat kemalangan, jadi saya menambah log semula.
Log buat semula adalah unik untuk enjin storan innodb, manakala binlog unik untuk lapisan pelayan
Log buat semula menyimpan log fizikal , dan binlog ialah Log logik
Seperti yang dinyatakan di atas, log buat semula menyokong saiz 4GB Jika ada lebih, ia mesti diproses dan ditulis ganti Log binlog itu satu log
fail, fail log baharu akan dibuat.
Berikut mengambil kemas kini baris data dengan ID 2 sebagai contoh:
Kotak cahaya dalam rajah menunjukkan bahawa ia dilaksanakan di dalam InnoDB, dan kotak gelap menunjukkan bahawa ia dilaksanakan dilaksanakan dalam pelayan.
Pelaksana terlebih dahulu mencari enjin untuk mendapatkan ID talian=2. ID ialah kunci utama dan enjin terus menggunakan carian pokok untuk mencari baris ini. Jika halaman data di mana baris ID=2 terletak sudah berada dalam ingatan, ia akan dikembalikan terus kepada pelaksana jika tidak, ia perlu dibaca ke dalam memori dari cakera dan kemudian dikembalikan.
Pelaksana mendapat data baris yang diberikan oleh enjin, menambah 1 pada nilai ini, contohnya, dulu N, tetapi sekarang N+1, mendapat baris baharu data, dan kemudian memanggil antara muka enjin Tulis baris data baharu ini.
Enjin mengemas kini baris data baharu ini ke dalam memori dan merekodkan operasi kemas kini ke dalam log buat semula Pada masa ini, log buat semula berada dalam keadaan sediakan. Kemudian maklumkan kepada pelaksana bahawa pelaksanaan telah selesai dan transaksi boleh diserahkan pada bila-bila masa. Semasa pelaksanaan operasi, pelaksana menjana binlog dan menulisnya ke cakera.
Pelaksana memanggil antara muka transaksi komit enjin, dan enjin menukar log buat semula yang baru ditulis kepada keadaan komit, dan kemas kini selesai.
Atas ialah kandungan terperinci Apakah keseluruhan proses melaksanakan pernyataan dalam Mysql?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!