คุณต้องมีประวัติของ InnoDB เพื่อที่จะเข้าใจว่าทำไม นี่มันไป:
เรื่องราวของสงคราม
InnoDB และแคชแบบสอบถามอยู่ในภาวะคงที่ของสงคราม InnoDB มักจะเป็นคนที่มือหนักมากเมื่อตรวจสอบการเปลี่ยนแปลงใน InnoDB Buffer Pool จากนั้นทำการ crosschecking Query Cache สำหรับการเปลี่ยนแปลงเดียวกัน
สนธิสัญญาสันติภาพ
ก่อน MySQL 5.0 แคชแบบสอบถามถูกปิดการใช้งานสำหรับ InnoDB ตอนนี้ InnoDB โต้ตอบกับมันแล้ว หากต้องการลดความซับซ้อนของเรื่องคุณสามารถปิดการใช้งาน Query Cache ได้โดยตั้งค่าquery_cache_sizeเป็น 0
ตามเอกสาร MySQL ใน query_cache_time
หากเซิร์ฟเวอร์เริ่มต้นด้วยquery_cache_typeตั้งค่าเป็น 0 มันจะไม่ได้รับแคชการสืบค้น mutex เลยซึ่งหมายความว่าแคชแบบสอบถามไม่สามารถเปิดใช้งานที่รันไทม์และมีค่าใช้จ่ายลดลงในการดำเนินการแบบสอบถาม
ข้อกำหนดในการยอมแพ้
การตั้งค่าquery_cache_sizeเป็น 0 ไม่ใช่โซลูชันที่เหมาะกับทุกขนาด
เหตุผลสำหรับการทำสงครามในตอนแรกนั้นคือค่าใช้จ่าย InnoDB จะตรวจสอบการเปลี่ยนแปลงอยู่เสมอ แคชแบบสอบถามที่ใหญ่กว่านั้นจะทำให้ InnoDB นั้นทำงานได้ยากขึ้นมาก การปิดใช้งานแคชคิวรีจะทำให้ InnoDB และ Query Cache มีความสุข อย่างไรก็ตามคุณ (ผู้พัฒนา / DBA) อาจเสียชีวิตจากสงครามนั้นโดยหมายถึงประสิทธิภาพการสืบค้นที่ไม่ดีแม้จะมีสนธิสัญญาสันติภาพอยู่ในสถานที่ก็ตาม
ขึ้นอยู่กับเรื่องต่อไปนี้
- จำนวนงาน
- ความถี่ของการเปลี่ยนแปลง
- ความถี่ในการอ่านข้อมูลเดียวกัน
คุณควรตั้งค่าquery_cache_sizeให้เป็นตัวเลขที่คุณรู้สึกว่าเพิ่มประสิทธิภาพ (ซึ่งเท่ากับการเริ่มต้นการเคลื่อนไหวใต้ดิน)
บทส่งท้าย
ในกรณีที่คุณสงสัยว่าฉันมากับเรื่องสงครามครั้งนี้ได้อย่างไรโปรดดูโพสต์เก่าของฉัน
อ่านอย่างละเอียดเพราะฉันได้เรียนรู้สิ่งนี้จากหน้า 209-215 ของ MySQL ประสิทธิภาพสูง (รุ่นที่ 2)
ฉันได้แนะนำให้ปิดการใช้งานแคชคิวรีให้ผู้อื่นมาก่อน
หมายเหตุ:ฉันรู้คำถามคือเกี่ยวกับquery_cache_type มันจะมีผลกับแคชแบบสอบถาม การปิดการใช้งานแคชจะทำให้ความเด่นของ InnoDB เหนือกว่า การตั้งค่าquery_cache_typeด้วยตนเองเพียงบังคับให้ Developer / DBA คิดอย่างรอบคอบเกี่ยวกับประเภทของคิวรีที่แคชแบบสอบถามจะพบ