ทำไม query_cache_type ถูกปิดใช้งานโดยค่าเริ่มต้นเริ่มต้นจาก MySQL 5.6?


28

เราได้อัพเกรดเป็น MySQL 5.6 และเริ่มเห็นว่าการโหลดเซิร์ฟเวอร์ db เพิ่มขึ้นอย่างมากและในที่สุดก็พบว่าค่า query_cache_typeเริ่มต้นคือ off จากเริ่มต้นที่ 5.6

เราเปิดใช้งานอีกครั้งและดูการลดลงของการโหลดทำไมค่านี้จึงถูกปิดการใช้งานโดยเริ่มต้นจาก MySQL 5.6? ฉันไม่เห็นปัญหาในการเปิดใช้งาน

คำตอบ:


39

คุณต้องมีประวัติของ 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 คิดอย่างรอบคอบเกี่ยวกับประเภทของคิวรีที่แคชแบบสอบถามจะพบ


สวัสดีฉันได้อ่านลิงก์ทั้งหมดของคุณแล้ว ที่จริงฉันพยายามปิดแคชของคิวรีอีกครั้งและเราเห็นว่าการโหลดเพิ่มขึ้นอย่างมากอีกครั้ง .. ดังนั้นเราต้องเปิดอีกครั้ง ฉันไม่ได้พูดในสิ่งที่คุณพูดผิดอาจเป็นเพียงแค่แอปพลิเคชันของเราอ่านอย่างหนักและแคชการสืบค้นมีประโยชน์มากในการลดการโหลด .. (เว็บไซต์ของเราใช้งาน WordPress)
Yoga

3
หากมีการโพสต์ SO มากขึ้นอ่านเช่นนี้ (ขอบคุณสำหรับการเปรียบเทียบที่สนุก)! ฉันพนันได้เลยว่าเด็ก ๆ ที่โชคดีของ Rolando ได้รับการบอกเล่านิทานก่อนนอนแบบ MySQL ทุกคืน! ;)
rinogo

2
"หน้า 209-215 ของประสิทธิภาพสูง MySQL (รุ่นที่ 2)" หมายถึงบทที่เรียกว่า "The MySQL Query Cache" จาก "เมื่อ Query Cache เป็นประโยชน์" และต่อท้าย สิ่งนี้สอดคล้องกับหน้า 320-329 ในรุ่นที่ 3
Peter V. Mørch

8

ฉันมีบล็อกโพสต์อธิบายว่าทำไมนี้อยู่ที่นี่

รุ่นสั้น: แคชแบบสอบถามทำให้เกิดปัญหาความยืดหยุ่นในเครื่องหลายคอร์ ดังนั้นจึงถูกปิดใช้งานในตอนนี้โดยค่าเริ่มต้น


ขณะที่การติดตามการโพสต์ของฉันสจ๊วตสมิ ธ อธิบายถึงผลกระทบที่เป็น "ลำดับความสำคัญ" ที่เลวร้ายยิ่งflamingspork.com/blog/2014/06/05/...
มอร์แกน Tocker

4

ให้เสร็จสมบูรณ์คำตอบที่ผลักดันของออราเคิลสำหรับ "แทนที่" การทำงานแคชแบบสอบถามเป็นการบูรณาการ memcached

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.