informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Langkah-langkah lapisan Server untuk mengeksekusi SQL secara berurutan adalah:
Permintaan klien -> Konektor (verifikasi identitas pengguna dan berikan izin) Cache kueri (kembali secara langsung jika ada cache, lakukan operasi selanjutnya jika tidak) Penganalisis (melakukan analisis leksikal dan analisis sintaksis SQL) Pengoptimal (terutama menjalankan metode pengoptimalan SQL untuk memilih yang terbaik rencana eksekusi) Pelaksana (saat mengeksekusi, pertama-tama akan memeriksa apakah pengguna memiliki izin eksekusi, dan kemudian menggunakan antarmuka yang disediakan oleh mesin ini) -> Buka lapisan mesin untuk mendapatkan pengembalian data (jika cache kueri diaktifkan, itu akan menyimpan hasil kueri dalam cache)
Buffer Pool adalah bagian penting dari mesin penyimpanan InnoDB dalam database MySQL. Ini terutama digunakan untuk menyimpan data tabel dan mengindeks data untuk mengurangi operasi I/O disk dan meningkatkan efisiensi pemrosesan database. Berikut ini adalah analisa detail dari Buffer Pool:
definisi: Buffer Pool adalah area memori di mesin penyimpanan InnoDB, digunakan untuk menyimpan halaman data dalam cache dan halaman indeks pada disk untuk mengurangi akses langsung ke disk.
memengaruhi: Meningkatkan kecepatan akses data dan mengurangi biaya I/O disk melalui mekanisme caching.
komposisi : Buffer Pool terdiri dari halaman data cache (Halaman) dan blok kontrol yang sesuai. Blok kontrol menyimpan informasi metadata halaman cache, seperti ruang tabel tempatnya, nomor halaman data, alamat halaman cache di Buffer Pool, dll.
ukuran bawaan: Ukuran default Buffer Pool di MySQL biasanya 128MB (namun perlu diketahui bahwa versi MySQL yang berbeda atau konfigurasi yang berbeda dapat menyebabkan ukuran default berbeda).
Parameter konfigurasi:lulusinnodb_buffer_pool_size
Parameter dapat mengonfigurasi ukuran Buffer Pool. Biasanya disarankan untuk mengaturnya ke 60%-80% dari memori sistem.
alokasi memori: Buffer Pool adalah ruang memori berkelanjutan. Ketika MySQL berjalan untuk jangka waktu tertentu, akan ada halaman cache kosong dan halaman cache bekas di ruang memori ini.
jenis
: Halaman data di Buffer Pool dapat dibagi menjadi tiga jenis menurut statusnya: Halaman Gratis, Halaman Bersih, dan Halaman Kotor.
Halaman gratis: halaman cache yang tidak digunakan.
Halaman bersih: Halaman cache yang telah digunakan tetapi datanya belum diubah.
Halaman kotor: Halaman cache yang telah digunakan dan datanya telah diubah, dan datanya tidak sesuai dengan data pada disk.
mengelola
: InnoDB mengelola halaman cache ini melalui tiga struktur daftar tertaut:
Daftar tertaut gratis: mengelola halaman gratis dan mencatat informasi blok kontrol halaman cache gratis.
Daftar tertaut LRU: mengelola halaman bersih dan halaman kotor, menggunakan algoritme LRU yang ditingkatkan, dan dibagi menjadi area muda dan area lama untuk mengoptimalkan tingkat cache hit.
Daftar tertaut siram: mengelola halaman kotor yang perlu dibuang ke disk, diurutkan berdasarkan waktu modifikasi.
akses data : Ketika suatu halaman data perlu diakses, InnoDB akan memeriksa terlebih dahulu apakah halaman tersebut sudah ada di Buffer Pool. Jika sudah ada, halaman tersebut digunakan secara langsung; jika tidak ada, halaman tersebut dibaca dari disk ke dalam Buffer Pool dan daftar tertaut yang sesuai diperbarui.
Pembaruan Data: Ketika halaman data diubah, halaman tersebut akan ditandai sebagai halaman kotor dan dapat ditambahkan ke daftar tertaut Flush untuk menunggu thread latar belakang membuangnya ke disk.
penggusuran cache: Ketika ruang Buffer Pool tidak mencukupi, halaman cache yang terakhir digunakan akan dihilangkan sesuai dengan algoritma LRU.
Atur ukurannya dengan tepat: Pengaturan yang wajar berdasarkan memori sistem dan kondisi pemuatan basis datainnodb_buffer_pool_size
parameter.
Pantau dan sesuaikan: Secara teratur memantau penggunaan dan indikator kinerja Buffer Pool dan melakukan penyesuaian sesuai kebutuhan.
Hindari pemindaian tabel penuh: Pemindaian tabel penuh akan menyebabkan sejumlah besar halaman data dimuat ke dalam Buffer Pool, sehingga mengurangi tingkat cache hit.
Singkatnya, Buffer Pool adalah salah satu komponen kunci mesin penyimpanan InnoDB di database MySQL. Melalui konfigurasi dan manajemen yang wajar, kinerja dan efisiensi database dapat ditingkatkan secara signifikan.
Proses MySQL melibatkan banyak tautan, mulai dari koneksi antara klien dan server MySQL, hingga eksekusi, optimasi, pembacaan data, dan pengembalian hasil pernyataan SQL. Berikut ini adalah gambaran rinci proses MySQL:
Konektor (Manajer Koneksi):
Ketika klien (seperti aplikasi atau alat baris perintah) meminta koneksi ke server MySQL, konektor MySQL bertanggung jawab untuk menangani permintaan koneksi ini.
Konektor memverifikasi identitas dan izin klien, yang biasanya mencakup pemeriksaan apakah nama pengguna dan kata sandi cocok.
Jika verifikasi berhasil, konektor akan mengalokasikan thread (atau sesi) ke klien untuk operasi SQL selanjutnya.
Cache Kueri (Cache Kueri, catatan: Modul ini telah dihapus di MySQL 8.0):
Untuk kueri SELECT, MySQL terlebih dahulu memeriksa apakah kueri yang sama dan hasilnya ada di cache kueri.
Jika ada, MySQL akan langsung mengembalikan hasilnya ke cache, sehingga menghindari melakukan operasi query yang sebenarnya.
Namun, karena cache kueri dapat menyebabkan ketidakkonsistenan data (misalnya, data cache mungkin telah diubah oleh transaksi lain), fungsi cache kueri telah dihapus di MySQL 8.0.
pengurai:
Pernyataan SQL yang dikirim oleh klien pertama kali dikirim ke parser.
Tugas parser adalah mengurai pernyataan SQL, memeriksa apakah sintaksnya benar, dan mengubahnya menjadi struktur data internal (seperti pohon parse atau pohon sintaksis).
Jika ada kesalahan sintaksis dalam pernyataan SQL, parser akan mengembalikan informasi kesalahan ke klien.
Praprosesor:
Dalam beberapa versi MySQL atau dalam beberapa skenario tertentu, mungkin terdapat tahap praprosesor.
Praprosesor terutama bertanggung jawab untuk memproses lebih lanjut pernyataan SQL, seperti memeriksa apakah tabel atau bidang ada, memperluas * dalam pernyataan SELECT ke semua kolom dalam tabel, dll.
Pengoptimal:
Pengoptimal bertanggung jawab untuk mengevaluasi rencana eksekusi yang berbeda untuk pernyataan SQL dan memilih rencana eksekusi yang optimal.
Pengoptimal mempertimbangkan berbagai faktor, seperti indeks yang tersedia, efisiensi metode penggabungan, biaya kueri, dll.
Pengoptimal dapat secara signifikan meningkatkan kinerja kueri melalui operasi seperti menggunakan indeks, menyusun ulang kueri, atau menggabungkan kueri.
Pelaksana:
Pelaksana melakukan operasi kueri sebenarnya berdasarkan rencana eksekusi yang dihasilkan oleh pengoptimal.
Pelaksana akan memanggil antarmuka mesin penyimpanan (seperti InnoDB) untuk membaca data dalam tabel data dan melakukan operasi seperti pengurutan, agregasi, dan pemfilteran.
Terakhir, pelaksana mengembalikan hasil query ke klien.
Mesin Penyimpanan:
MySQL mendukung banyak mesin penyimpanan, dan setiap mesin penyimpanan memiliki metode penyimpanan dan pengambilan data tersendiri.
InnoDB adalah salah satu mesin penyimpanan default MySQL dan mendukung fitur database tingkat lanjut seperti pemrosesan transaksi, penguncian tingkat baris, dan kunci asing.
Ketika pelaksana memanggil antarmuka mesin penyimpanan, mesin penyimpanan bertanggung jawab untuk membaca data dari disk atau menulis data ke disk.
Kolam Penyangga:
Mesin penyimpanan InnoDB menggunakan Buffer Pool untuk menyimpan data tabel dalam cache dan mengindeks data untuk mengurangi akses langsung ke disk.
Halaman data di Buffer Pool dikelola berdasarkan frekuensi akses dan status modifikasi untuk meningkatkan tingkat cache hit dan kinerja kueri.
Transaksi:
MySQL mendukung pemrosesan transaksi, memungkinkan beberapa operasi dilakukan atau dibatalkan secara keseluruhan.
Selama eksekusi transaksi, MySQL akan mencatat informasi log yang diperlukan (seperti redo log dan undo log) untuk memastikan integritas dan konsistensi data.
Jika eksekusi transaksi berhasil, semua modifikasi akan disimpan secara permanen dalam database; jika eksekusi transaksi gagal, Anda dapat menggunakan undo log untuk melakukan operasi rollback dan mengembalikan data ke keadaan sebelum transaksi dimulai.
Proses MySQL melibatkan koneksi dan otentikasi, pemrosesan kueri, penyimpanan dan pengambilan data, dan pemrosesan transaksi. Dengan mengoptimalkan setiap langkah dalam tautan ini, kinerja dan keandalan database MySQL dapat ditingkatkan secara signifikan. Pada saat yang sama, memahami proses eksekusi MySQL juga akan membantu untuk lebih memahami mekanisme kerja internalnya, sehingga merancang dan mengoptimalkan database dengan lebih baik.
Kumpulan koneksi MySQL adalah teknologi yang digunakan untuk mengelola dan menggunakan kembali koneksi database. Ini dirancang untuk meningkatkan kinerja dan efisiensi operasi database, terutama di lingkungan dengan konkurensi tinggi. Berikut penjelasan detail mengenai connection pool MySQL:
Kumpulan koneksi MySQL membuat koneksi database dalam jumlah yang memadai saat program dimulai, dan mengelola koneksi ini secara seragam untuk membentuk kumpulan koneksi. Ketika program perlu mengakses database, program akan secara dinamis menerapkan koneksi dari kumpulan koneksi, dan mengembalikan koneksi ke kumpulan koneksi setelah digunakan, alih-alih membuat ulang dan menutup koneksi untuk setiap operasi.
Mengurangi konsumsi sumber daya : Pembuatan dan penutupan koneksi database adalah proses yang relatif memakan waktu, melibatkan jabat tangan tiga arah dan gelombang koneksi TCP empat arah, serta proses otentikasi database. Melalui pengumpulan koneksi, koneksi yang ada dapat digunakan kembali untuk mengurangi overhead ini.
Meningkatkan kinerja : Dalam skenario konkurensi tinggi, jika koneksi database baru dibuat untuk setiap permintaan, kinerja server akan turun secara signifikan. Menggunakan kumpulan koneksi dapat meningkatkan kecepatan respons dan throughput database secara signifikan.
Hindari kebocoran koneksi : Tanpa menggunakan kumpulan koneksi, jika terjadi pengecualian saat program menutup koneksi, hal ini dapat menyebabkan kebocoran koneksi, yaitu koneksi tidak ditutup dengan benar dan menghabiskan sumber daya sistem. Kumpulan koneksi dapat menghindari situasi ini melalui mekanisme daur ulang batas waktu.
inisialisasi: Saat program dimulai, kumpulan koneksi akan membuat sejumlah koneksi database tertentu sesuai dengan konfigurasi, dan memasukkan koneksi ini ke dalam kumpulan koneksi untuk cadangan.
Terapkan untuk koneksi : Ketika program perlu mengakses database, program akan mengajukan koneksi dari kumpulan koneksi. Jika ada koneksi idle di kumpulan koneksi, maka akan langsung dikembalikan ke program untuk digunakan; jika tidak ada koneksi idle, maka akan menunggu selama jangka waktu tertentu atau mengembalikan kesalahan sesuai konfigurasi.
Gunakan koneksi: Program menggunakan koneksi yang diminta untuk melakukan operasi database.
koneksi kembali : Setelah operasi selesai, program mengembalikan koneksi ke kumpulan koneksi. Kumpulan koneksi akan melakukan pemeriksaan tertentu pada koneksi. Jika koneksi masih valid, maka akan dimasukkan kembali ke dalam kumpulan koneksi; jika koneksi telah kedaluwarsa, maka akan ditutup dan dihapus dari kumpulan koneksi.
Tutup kumpulan koneksi: Ketika program berakhir, semua koneksi di kumpulan koneksi akan ditutup dan sumber daya sistem yang ditempati akan dilepaskan.
Ada banyak penyedia kumpulan koneksi MySQL di pasaran, di antaranya yang lebih populer adalah:
Bahasa Inggris DBCP : Ini adalah implementasi kumpulan koneksi sumber terbuka di bawah proyek Apache, dan merupakan kumpulan koneksi yang disertakan dengan Tomcat. Ini lebih cepat dibandingkan kumpulan koneksi lainnya, tetapi mungkin tidak cukup stabil.
Bahasa Indonesia: C3P0 : Ini adalah kumpulan koneksi JDBC sumber terbuka, yang mengimplementasikan sumber data dan pengikatan JNDI, serta mendukung standar JDBC3 dan ekstensi standar JDBC2. Laju C3P0 relatif lambat namun sangat stabil.
Orang yang suka berdzikir (Druid): Ini adalah kumpulan koneksi sumber terbuka yang disediakan oleh Alibaba. Ini menggabungkan keunggulan DBCP dan C3P0 dan menyediakan fungsi pemantauan dan perluasan yang kuat. Druid saat ini merupakan salah satu kumpulan koneksi MySQL yang paling umum digunakan.
Konfigurasi kumpulan koneksi biasanya mencakup aspek-aspek berikut:
Jumlah koneksi maksimum: Jumlah maksimum koneksi yang dapat dikelola oleh kumpulan koneksi.
Jumlah koneksi minimum: Jumlah awal koneksi yang dibuat saat kumpulan koneksi dimulai.
Dapatkan batas waktu koneksi: Waktu tunggu maksimum saat mendapatkan koneksi dari kumpulan koneksi.
Verifikasi koneksi: Memverifikasi keabsahan koneksi sebelum memperoleh koneksi atau saat mengembalikan koneksi.
Strategi daur ulang koneksi: Mendaur ulang koneksi berdasarkan waktu idle dan waktu penggunaannya.
Pengumpulan koneksi dan pengumpulan thread adalah dua teknologi pengumpulan sumber daya yang berbeda, namun ada hubungan tertentu di antara keduanya. Kumpulan thread terutama digunakan untuk mengelola sumber daya thread, sedangkan kumpulan koneksi digunakan untuk mengelola sumber daya koneksi database. Ketika sebuah thread di kumpulan thread perlu melakukan operasi database, maka thread tersebut akan mengajukan koneksi dari kumpulan koneksi; setelah operasi selesai, koneksi akan dikembalikan ke kumpulan koneksi. Hubungan ini membantu mencapai pemanfaatan sumber daya yang efisien dan pengelolaan yang disederhanakan.
Singkatnya, kumpulan koneksi MySQL adalah teknologi manajemen koneksi database yang penting. Teknologi ini memberikan dukungan kuat untuk operasi database dengan menggunakan kembali koneksi, mengurangi konsumsi sumber daya, dan meningkatkan kinerja. Dalam aplikasi sebenarnya, penyedia kumpulan koneksi dan parameter konfigurasi yang sesuai dapat dipilih sesuai dengan kebutuhan spesifik dan skenario proyek.
Pertanyaan wawancara terkait log MySQL dapat mencakup banyak aspek, termasuk jenis, peran, konfigurasi, optimalisasi log, dan penerapan log dalam pemulihan data, replikasi data, dll. Berikut ini adalah beberapa pertanyaan wawancara umum terkait log MySQL dan jawaban rincinya:
Log umum di MySQL meliputi yang berikut:
Catatan eror : Catat informasi kesalahan saat server MySQL dimulai, dijalankan, atau dihentikan, serta informasi kesalahan kritis apa pun. Ini membantu mendiagnosis masalahnya.
Log kueri (Log Umum) : Mencatat setiap permintaan dan respons klien yang diterima oleh server MySQL, termasuk aktivitas login pengguna, pernyataan SQL yang dijalankan, dll. Biasanya digunakan untuk audit atau debugging.
Log Kueri Lambat : Catat pernyataan SQL yang waktu eksekusinya melebihi ambang batas, serta waktu eksekusi, tabel yang diakses, indeks yang digunakan, dan informasi lain dari pernyataan tersebut. Digunakan untuk penyetelan kinerja dan pengoptimalan kueri.
Log Biner (singkatnya Binlog): Catat semua pernyataan yang mengubah data database (tidak termasuk pernyataan seperti SELECT dan SHOW), terutama digunakan untuk replikasi dan pemulihan data.
Ulangi Log: Di mesin penyimpanan InnoDB, ini digunakan untuk memastikan ketahanan transaksi. Bahkan jika terjadi kerusakan sistem, data dapat dipulihkan melalui log ulang.
Batalkan Pencatatan: Pada mesin penyimpanan InnoDB digunakan untuk mencatat keadaan data sebelum transaksi dimulai, sehingga ketika transaksi gagal atau dibatalkan, data dapat dikembalikan ke keadaan sebelum transaksi dimulai.
Log Relai: Dalam arsitektur replikasi MySQL, log relai di server budak digunakan untuk menyimpan konten log biner yang diterima dari server master.
Log kueri lambat dapat dibuka dan dikonfigurasi melalui file konfigurasi MySQL (seperti my.cnf atau my.ini), atau dapat diatur secara dinamis melalui perintah SQL.
Metode file konfigurasi:
Tambahkan atau ubah parameter berikut di file konfigurasi MySQL:
[mysqld] slow_query_log = 1 slow_query_log_file = /path/to/your/slow-query.log long_query_time = 2
di dalam,
slow_query_log
Digunakan untuk mengaktifkan log kueri lambat,
slow_query_log_file
Tentukan jalur ke file log kueri lambat,
long_query_time
Atur waktu eksekusi pernyataan SQL melebihi jumlah detik untuk dicatat dalam log kueri lambat.
Setelah memodifikasi file konfigurasi, Anda perlu me-restart layanan MySQL.
Mode perintah SQL:
Log kueri lambat dapat diaktifkan secara dinamis melalui perintah SQL, namunslow_query_log_file
Danlong_query_time
Parameter mungkin perlu diatur melalui file konfigurasi, karena pengaturan dinamis mungkin tidak didukung atau mungkin tidak berfungsi.
Aktifkan log kueri lambat:
sql复制代码 SET GLOBAL slow_query_log = 'ON';
Perhatikan bahwa log kueri lambat yang dibuka secara dinamis menggunakan perintah SQL mungkin menjadi tidak valid setelah sistem dimulai ulang, jadi disarankan untuk mengaturnya melalui file konfigurasi.
Log biner (Binlog) memiliki tiga format:
PENYATAAN : Replikasi berbasis pernyataan SQL (replikasi berbasis pernyataan, SBR). Dalam format ini, MySQL akan mencatat pernyataan SQL yang dieksekusi ke binlog. Keuntungannya adalah volume lognya kecil, tetapi mungkin mengalami beberapa masalah replikasi, seperti fungsi, pemicu, prosedur tersimpan, dll. yang dapat menyebabkan ketidakkonsistenan pada data master-slave.
BARIS : Replikasi berbasis baris (RBR). Dalam format ini, MySQL akan mencatat perubahan data dari baris yang diubah. Keuntungannya adalah menghindari beberapa masalah replikasi, namun volume lognya bisa besar.
CAMPURAN : Replikasi berbasis campuran (MBR). MySQL akan secara otomatis memilih untuk menggunakan format STATEMENT atau ROW sesuai dengan situasi. Mode campuran adalah mode default dan dirancang untuk menggabungkan yang terbaik dari kedua dunia.
Redo Log memastikan ketahanan transaksi di mesin penyimpanan InnoDB dengan cara berikut:
Ketika transaksi dikirimkan, mesin InnoDB pertama-tama akan menyimpan log pengulangan transaksi ke dalam buffer log pengulangan di memori, dan pada saat yang sama memperbarui halaman data terkait di memori.
Kemudian pada waktu yang tepat, tulis log redo di buffer log redo ke file log redo di disk. Proses ini tidak sinkron, namun waktu dan frekuensi penyikatan disk dapat dikontrol dengan mengonfigurasi parameter.
Jika terjadi kerusakan sistem, mesin InnoDB akan memeriksa file log redo saat startup dan memulihkan modifikasi yang dibuat oleh transaksi yang paling baru dikirimkan berdasarkan catatan di dalamnya untuk memastikan ketahanan data.
Lihat file log:
catatan eror: Hal ini biasanya dapat dilakukan dengan melihat file konfigurasi MySQLlog_error
parameter untuk menentukan jalur file untuk menemukan file log kesalahan dan menggunakan editor teks atau alat baris perintah sepertitail
、cat
dll.) untuk melihat isinya.