Mengapa query_cache_type dinonaktifkan secara default mulai dari MySQL 5.6?

28

Kami telah memutakhirkan ke MySQL 5.6 dan mulai melihat pemuatan server db meningkat secara signifikan, dan akhirnya mengetahui bahwa query_cache_typedefaultnya adalah off mulai dari 5.6.

Kami mengaktifkannya lagi dan melihat penurunan pemuatan, mengapa nilai ini dinonaktifkan secara default mulai dari MySQL 5.6? Saya tidak dapat melihat masalah dalam mengaktifkannya.

Yoga
sumber

Jawaban:

39

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.

RolandoMySQLDBA
sumber
Hai, saya sudah membaca semua tautan Anda. Sebenarnya saya mencoba untuk mematikan cache permintaan lagi dan kami melihat pemuatan meningkat secara signifikan lagi..jadi kita perlu menghidupkan lagi. Saya tidak mengatakan apa yang Anda katakan salah, mungkin hanya aplikasi kami yang berat dibaca dan permintaan cache sangat berguna untuk mengurangi memuat .. (situs kami menjalankan WordPress)
Yoga
3
Jika hanya lebih banyak tulisan SO yang dibaca seperti ini (terima kasih atas analoginya yang menyenangkan)! Saya yakin anak-anak beruntung Rolando menceritakan kisah-kisah pengantar tidur MySQL seperti ini setiap malam! ;)
rinogo
2
"Halaman 209-215 dari MySQL Kinerja Tinggi (Edisi 2)" mengacu pada bab yang disebut "Cache MySQL Query", dari "Ketika Cache Query Bermanfaat" dan sampai akhir. Ini sesuai dengan halaman 320-329 dalam Edisi ke-3.
Peter V. Mørch
8

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.

Morgan Tocker
sumber
Sebagai tindak lanjut posting saya, Stewart Smith menggambarkan dampaknya sebagai "urutan besarnya" flamingspork.com/blog/2014/06/05/…
Morgan Tocker
4

Untuk menyelesaikan jawaban, desakan Oracle untuk "mengganti" fungsi cache query adalah integrasi memcached .

jynus
sumber