Mempercepat Laman Web Anda Dengan Caching Kueri MySQL
Salah satu cara terbaik untuk mempercepatkan aplikasi web anda adalah untuk membolehkan caching pertanyaan dalam pangkalan data anda, yang cache biasanya menggunakan pertanyaan SQL dalam memori untuk akses segera segera oleh halaman seterusnya yang membuat permintaan yang sama.
Alasan kaedah ini begitu kuat adalah bahawa anda tidak perlu membuat sebarang perubahan pada aplikasi web anda, anda hanya perlu mengorbankan sedikit memori. Ini tidak akan membetulkan semua masalah anda, tetapi ia pasti tidak boleh menyakiti.
Nota: jika aplikasi anda mengemas kini jadual kerap, maka cache pertanyaan akan dibersihkan secara berterusan dan anda tidak akan mendapat banyak atau manfaat daripada ini. Ini sesuai untuk aplikasi yang kebanyakannya berbunyi terhadap pangkalan data, seperti blog WordPress. Ini juga tidak berfungsi jika anda menjalankan hosting dikongsi.
Dayakan Caching dengan Running Server
Perkara pertama yang anda ingin lakukan ialah memastikan pemasangan MySQL anda sebenarnya mempunyai sokongan caching pertanyaan yang ada. Kebanyakan pengedaran lakukan, tetapi anda perlu menyemak.
Anda akan mahu menjalankan arahan ini dari konsol MySQL anda, yang akan memberitahu anda jika pertanyaan caching tersedia.
mysql> menunjukkan pemboleh ubah seperti 'has_query_cache'; + ------------------ + ------- + | Variable_name | Nilai | + ------------------ + ------- + | have_query_cache | YA | +------------------+-------+
Jangan salahkan ini kerana maksudnya caching pertanyaan sebenarnya diaktifkan, kerana kebanyakan pembekal hosting tidak akan mengaktifkannya secara lalai. Cukup menarik, pemasangan Ubuntu Feisty saya sudah membolehkannya ...
Seterusnya kita perlu menyemak dan melihat sama ada cache carian diaktifkan. Kami perlu menyemak lebih daripada satu pemboleh ubah, jadi kami juga boleh melakukannya sekaligus dengan memeriksa pertanyaan berubah%
mysql> menunjukkan pembolehubah seperti 'query%'; + ------------------------------ + --------- + | Variable_name | Nilai | + ------------------------------ + --------- + | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 8388608 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | +------------------------------+---------+
Berikut adalah perkara-perkara penting dalam senarai dan apa yang mereka maksudkan:
- query_cache_size - Ini adalah saiz cache dalam bait. Menetapkan nilai ini kepada 0 akan melumpuhkan caching secara berkesan.
- query_cache_type - Nilai ini mesti ON atau 1 untuk caching pertanyaan yang didayakan secara lalai.
- query_cache_limit - Ini adalah pertanyaan saiz maksimum (dalam bait) yang akan di-cache.
Jika nilai query_cache_size ditetapkan kepada 0 atau anda hanya ingin menukarnya, anda perlu menjalankan arahan berikut, dengan mengingat bahawa nilai dalam bait. Sebagai contoh, jika anda mahu memperuntukkan 8MB ke cache yang kami gunakan 1024 * 1024 * 8 = 8388608 sebagai nilai.
SET GLOBAL query_cache_size = 8388608;
Begitu juga, pilihan lain boleh ditetapkan dengan sintaks yang sama:
SET GLOBAL query_cache_limit = 1048576;SET GLOBALquery_cache_type
= 1;
Sekarang bagaimana kita tahu sama ada ia berfungsi? Anda boleh menggunakan arahan STATUS SHOW untuk menarik semua pembolehubah yang bermula dengan "Qc" untuk melihat apa yang berlaku di bawah tudung.
mysql> SHOW STATUS LIKE 'Qc%'; + ------------------------- + -------- + | Variable_name | Nilai | + ------------------------- + -------- + | Qcache_free_blocks | 65 | | Qcache_free_memory | 201440 | | Qcache_hits | 18868 | | Qcache_inserts | 2940 | | Qcache_lowmem_prunes | 665 | | Qcache_not_cached | 246 | | Qcache_queries_in_cache | 492 | | Qcache_total_blocks | 1430 | + ------------------------- + -------- + 8 baris dalam set (0.00 detik)
Anda akan perhatikan dalam statistik bahawa saya mempunyai banyak memori percuma yang tersisa. Sekiranya pelayan anda menunjukkan banyak buah prima rendah, anda mungkin perlu mempertimbangkan untuk meningkatkan nilai ini, tetapi saya tidak akan menghabiskan terlalu banyak memori pada caching pertanyaan untuk pelayan web ... anda perlu meninggalkan memori yang tersedia untuk apache, php, ruby, atau apa sahaja yang anda gunakan.
Dayakan dalam Fail Config
Sekiranya anda mahukan perubahan ini untuk terus hidup reboot atau mulakan semula pelayan mysql, anda perlu menambahkannya ke dalam fail konfigurasi /etc/mysql/my.cnf untuk MySQL. Perhatikan bahawa ia mungkin berada di lokasi lain pada pemasangan anda.
Buka fail menggunakan editor teks dalam mod sudo atau root, dan kemudian tambahkan nilai ini jika mereka belum ada dalam fail. Sekiranya mereka wujud, cuma beritahu mereka.
query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576
Caching pertanyaan dengan ketara dapat meningkatkan kelajuan aplikasi web anda, terutamanya jika aplikasi anda kebanyakannya dibaca. Pantau status menggunakan kaedah di atas dan lihat bagaimana ia berfungsi dari masa ke masa.