หนึ่งในเว็บไซต์ Drupal 7 ของฉันมีฟิลด์เป็นพันประเภทเนื้อหาหลากหลายมีการดูมากกว่า 25 ครั้งและประเภทโปรไฟล์นับร้อย (ในไม่ช้าจะนับเป็นพัน) ด้วยเหตุนี้ฉันใช้ core patch ที่ดีกว่าแคชข้อมูลฟิลด์เอนทิตี (http://drupal.org/node/1040790) และ -dev เวอร์ชันของ Views ที่ดีกว่าแคชวิวโดยแสดง (แทนที่จะมีขนาดใหญ่หนึ่งอัน ดูแถวแคชด้วยข้อมูลมุมมองทั้งหมดในนั้น)
สิ่งนี้ช่วยให้หน้าเว็บส่วนใหญ่ในไซต์โหลดด้วย RAM ขนาด 20-30MB มากกว่า 160MB + (แทนที่จะดึง cache_ * แถวของตารางสำหรับเขตข้อมูลและมุมมองที่มีขนาด 10MB + โปรแกรมปรับปรุงช่วยรักษาข้อมูลแคช _ * ให้มีประสิทธิภาพมากขึ้น)
สิ่งนี้นำเสนอปัญหาอย่างไรก็ตามการสร้างแคชใหม่นั้นใช้เวลานานมาก มักจะมากกว่าหนึ่งหรือสองนาที และในช่วงเวลานี้ Drupal จะไม่โหลดหน้าใด ๆ (เนื่องจากแคชที่พยายามอ่านไม่ได้สร้างขึ้นคำขออื่น ๆ จึงต้องรอ)
ในระหว่างรอบการจราจรต่ำนี่ไม่ใช่เรื่องใหญ่ ผู้ใช้หนึ่งร้อยหรือมากกว่านั้นจะต้องรอหนึ่งนาทีก่อนที่จะโหลดหน้าเว็บ แต่ในระหว่างรอบการรับส่งข้อมูลสูงเซิร์ฟเวอร์ Apache เริ่มคลั่งไคล้โหลดซีพียู 40+ และหน่วยความจำจะเต็มเร็วขึ้นเนื่องจากเธรดผู้ทำงานทั้งหมดรอและหน่วยความจำสูงสุดทำให้เกิดการแลกเปลี่ยน มันเป็นเกลียวมรณะ การรีสตาร์ท httpd จะทำให้สิ่งต่าง ๆ หมดไป แต่ใช้เวลา 5-10 นาทีเพื่อให้สิ่งต่าง ๆ กลับสู่ปกติ
เป้าหมายของฉันคือการทำให้มันชัดเจนว่าแคชจะไม่นำเว็บไซต์ไปที่หัวเข่า สำหรับหนึ่งถ้าฉันใช้ฟังก์ชั่นการล้างแคชส่วนตัวของ admin_menu (เช่น "CSS และ JS" จากนั้น "เมนู" จากนั้น "ธีมรีจิสตรี" ฯลฯ ) สิ่งต่าง ๆ จะราบรื่นจนกว่าฉันจะกดตัวเลือก "หน้าและอื่น ๆ " นั่นคือเวลาที่แคชของมุมมองถูกรีเซ็ต (การทำงานของ CPU และฐานข้อมูลจำนวนมากที่มีจำนวนการดูที่ต้องแคช) และเมื่อแคชข้อมูลฟิลด์ถูกรีเซ็ต (ซึ่งก็คือ CPU และฐานข้อมูลบนเว็บไซต์นี้)
ดังนั้น ... คำถาม / ความคิดของฉัน:
- การใช้ drush และ / หรือเชลล์สคริปต์อื่น ๆ เป็นไปได้ไหมที่ฉันจะล้างแคชด้วยวิธีที่ชาญฉลาดกว่า "ระเบิดแคชทั้งหมดในคราวเดียวและหวังว่าจะสร้างใหม่ทั้งหมด"
- ฉันสามารถปิดกั้นการร้องขอ HTTP ในขณะที่การล้างแคชเกิดขึ้นดังนั้น apache จะไม่ถูกปิดกั้นด้วยคำขอการประทับตราแคชจำนวนมาก?
- หากฉันสามารถล้างแคชนอกคำขอ httpd ของ Drupal / ปกติฉันสามารถตั้งค่า memory_limit PHP ที่สูงขึ้นสำหรับการดำเนินการล้างแคชและถอยกลับ memory_limit สากลของฉัน (ตั้งค่าตอนนี้เป็น 256MB ในกรณีที่เธรด httpd แต่ละรายการต้องการล้างแคช ... )
โดยทั่วไป: มีวิธีที่ชาญฉลาดและสง่างามในการล้างแคชทั้งหมดด้วย Drupal นอกเหนือจากการคลิกปุ่มใน UI หรือใช้งานdrush cc all
หรือไม่?
[ แก้ไขเพื่อความกระจ่าง : ปัญหาหลักที่ฉันมีคือการสร้างแคชใหม่ซึ่ง (a) ใช้เวลาสักครู่และ (b) บล็อกคำขออื่น ๆ ทั้งหมดจนกว่าการสร้างใหม่จะเสร็จสมบูรณ์ ฉันต้องการหาวิธีในการสร้างมันขึ้นมาใหม่เพื่อให้การสร้างใหม่ไม่เป็นอันตรายถึงตายในช่วงเวลาที่มีการจราจรหนาแน่น]