Salah satu situs Drupal 7 saya memiliki ribuan bidang, banyak jenis konten, lebih dari 25 tampilan, dan ratusan (segera menjadi ribuan) jenis profil. Karena itu, saya menggunakan patch inti yang lebih baik untuk cache info bidang entitas (http://drupal.org/node/1040790), dan versi -dev Tampilan yang lebih baik cache tampilan dengan tampilan (daripada memiliki satu BESAR lihat baris cache dengan semua data tampilan di dalamnya).
Ini telah membantu sebagian besar halaman di situs untuk memuat dengan 20-30MB RAM yang digunakan, daripada 160MB + (bukannya menarik cache_ * baris tabel untuk bidang dan tampilan yang 10MB +, tambalan membantu menjaga data cache_ * jauh lebih efisien).
Ini menimbulkan masalah, bagaimanapun, dalam membangun kembali cache membutuhkan waktu yang sangat lama . Biasanya lebih dari satu atau dua menit. Dan selama ini, Drupal tidak akan memuat halaman apa pun (karena cache yang coba dibaca belum dibuat, permintaan lain harus menunggu).
Selama siklus lalu lintas rendah, ini bukan masalah besar; seratus atau lebih pengguna harus menunggu satu menit sebelum halaman dimuat. Tetapi selama siklus lalu lintas tinggi, server Apache mulai menjadi gila, dengan 40+ CPU load, dan memori dengan cepat terisi karena semua thread pekerja duduk menunggu, dan memaksimalkan memori mereka, menyebabkan pertukaran. Ini semacam spiral kematian. Restart dari httpd akan menghapus semuanya, tetapi butuh 5-10 menit agar semuanya kembali normal.
Tujuan saya adalah membuatnya jadi cache tidak membersihkan situs. Untuk satu, jika saya menggunakan fungsi pembersihan cache admin_menu individu (seperti "CSS dan JS", lalu "Menu", lalu "Theme registry", dll.), Semuanya berjalan lancar sampai saya menekan opsi "Page and else". Saat itulah cache pandangan diatur ulang (operasi yang sangat CPU dan basis data dengan jumlah tampilan yang perlu di-cache), dan ketika cache info bidang diatur ulang (yang juga CPU dan database-intensif di situs ini).
Jadi ... pertanyaan / ide saya:
- Menggunakan drush dan / atau skrip shell lainnya, mungkinkah saya menghapus cache dengan cara yang lebih cerdas daripada "meledakkan semua cache sekaligus, dan berharap untuk membangun kembali yang bersih"?
- Dapatkah saya memblokir permintaan http saat pembersihan cache sedang terjadi sehingga apache tidak tersumbat dengan banyak permintaan cache-cache?
- Jika saya dapat menghapus cache di luar Drupal / permintaan httpd normal, saya mungkin dapat mengatur PHP memory_limit yang lebih tinggi untuk operasi cache yang jelas, dan membatalkan universal memory_limit saya (sekarang ditetapkan ke 256MB, kalau-kalau ada thread httpd individu perlu menghapus cache. ...).
Pada dasarnya: Apakah ada cara cerdas dan anggun untuk menghapus semua cache dengan Drupal selain hanya mengklik tombol di UI, atau menggunakan drush cc all
?
[ Edit untuk klarifikasi : Masalah utama yang saya miliki adalah membangun kembali cache , yang (a) perlu waktu, dan (b) memblokir semua permintaan lain sampai pembangunan kembali selesai. Saya ingin menemukan cara untuk membuatnya sehingga pembangunan kembali tidak begitu mematikan selama masa lalu lintas tinggi.]