Anda perlu riwayat InnoDB untuk memahami alasannya. Ini dia:
CERITA PERANG
InnoDB dan cache permintaan berada dalam keadaan perang konstan. InnoDB cenderung sangat kidal ketika memeriksa perubahan dalam Pool Buffer InnoDB dan kemudian crosschecking Query Cache untuk perubahan yang sama.
PERJANJIAN DAMAI
Sebelum MySQL 5.0, cache kueri dinonaktifkan untuk InnoDB. Sekarang, InnoDB berinteraksi dengannya. Untuk menyederhanakan masalah, Anda bisa menonaktifkan Query Cache dengan mengatur query_cache_size ke 0.
Menurut Dokumentasi MySQL pada query_cache_time
Jika server dimulai dengan query_cache_type diatur ke 0, itu tidak mendapatkan Mutex cache cache sama sekali, yang berarti bahwa cache query tidak dapat diaktifkan saat runtime dan ada pengurangan overhead dalam eksekusi query.
KETENTUAN SURRENDER
Menyetel query_cache_size ke 0 bukan solusi satu ukuran untuk semua.
Alasan perang, di tempat pertama, adalah overhead. InnoDB akan selalu memeriksa perubahan. Cache permintaan yang lebih besar akan membuat InnoDB bekerja jauh lebih sulit. Menonaktifkan cache permintaan, biarkan InnoDB dan Query Cache dengan senang hati. Namun, Anda (Pengembang / DBA) mungkin menjadi korban perang itu dengan cara kinerja permintaan yang buruk, bahkan dengan perjanjian damai seperti itu di tempat.
Tergantung pada yang berikut ini
- Beban kerja
- Frekuensi Perubahan
- Frekuensi membaca data yang sama
Anda harus mengatur query_cache_size ke nomor apa pun yang Anda rasa meningkatkan kinerja (Ini sama dengan memulai gerakan bawah tanah).
EPILOG
Jika Anda bertanya-tanya di mana saya datang dengan kisah perang ini, silakan lihat posting lama saya
Baca dengan seksama karena saya mempelajari ini dari Halaman 209-215 dari High Performance MySQL (2nd Edition)
Saya merekomendasikan menonaktifkan cache permintaan kepada orang lain sebelumnya
CATATAN: Saya menyadari pertanyaannya adalah tentang query_cache_type . Itu memang berpengaruh pada cache kueri. Menonaktifkan cache menekan dominasi InnoDB di atasnya. Mengatur kueri_cache_type secara manual cukup memaksa Pengembang / DBA untuk memikirkan dengan cermat tentang jenis kueri yang akan ditemui oleh cache kueri.
Saya punya posting blog yang menjelaskan mengapa ini ada di sini .
Versi singkat: Cache permintaan menyebabkan masalah skalabilitas pada mesin multi-core. Jadi sekarang dinonaktifkan secara default.
sumber
Untuk menyelesaikan jawaban, desakan Oracle untuk "mengganti" fungsi cache query adalah integrasi memcached .
sumber