Один з моїх сайтів Drupal 7 має тисячі полів, купу типів вмісту, більше 25 переглядів та сотні (незабаром стане тисячами) типів профілів. Через це я використовую основний патч, який краще кешує інформацію про сутність сутності (http://drupal.org/node/1040790), і -dev версію Views, яка краще кешує перегляди за допомогою відображення (замість того, щоб мати один ВЕЛИЧИЙ рядок кешу переглядів із усіма даними переглядів у ньому).
Це допомогло більшості сторінок на сайті завантажувати 20-30 МБ оперативної пам’яті, а не 160 МБ + (замість того, щоб підтягувати рядки таблиці кеш_ * для полів та переглядів, що були 10 МБ +, виправлення допомагають зберегти дані кеш_ * набагато ефективніше).
Однак це створює проблему в тому, що відновлення кешу займає дуже багато часу . Зазвичай більше хвилини-двох. І за цей час Drupal просто не завантажуватиме жодних сторінок (оскільки кеші, з яких він намагається прочитати, ще не побудовані, інших запитів потрібно чекати).
Під час циклів з низьким трафіком це не велика справа; Сто або більше користувачів просто доведеться зачекати хвилину, перш ніж сторінка завантажиться. Але під час циклів з високим трафіком сервер Apache починає з глузду із завантаженням процесора 40+, і пам’ять швидко заповнюється, тому що всі робочі потоки сидять в очікуванні і збільшують максимум пам'яті, викликаючи заміну. Це свого роду спіраль смерті. Перезапуск httpd очистить речі, але потрібно 5-10 хвилин, щоб вони повернулися до норми.
Моя мета - зробити так, щоб кеш-пам'ять очищалася, не ставила сайт на коліна. Для одного, якщо я використовую індивідуальні функції очищення кеша адміністратора (наприклад, "CSS та JS", потім "Меню", потім "Реєстр тем" тощо), все пройде гладко, поки я не натиснув опцію "Сторінка та інше". Ось тоді кеш переглядів скидається (дуже керована процесором та базами даних робота з кількістю переглядів, які потрібно кешувати), і коли кеш інформаційного поля скидається (що також є процесором та інтенсивним використанням баз даних на цьому сайті).
Отже ... мої запитання / ідеї:
- Чи можна за допомогою барабанного та / або іншого сценарію оболонки очищати кеші більш розумним способом, ніж "вибух всіх кешів відразу і сподіваюся на чисту перебудову"?
- Чи можу я заблокувати запити http, поки відбувається очищення кешу, щоб апаш не забився купою запитів із штампуванням кеша?
- Якщо я можу очистити кеші за межами запиту Drupal / звичайний httpd, я, мабуть, можу встановити більш високий PHP memory_limit для кеш-операції та відключити свій універсальний memory_limit (зараз встановлено 256MB, якщо будь-який окремий потік httpd потребує очищення кеш-пам'яті ...).
В основному: Чи є якийсь розумний і витончений спосіб очистити всі кеші з Drupal, крім того, щоб просто натиснути кнопку в інтерфейсі або використовувати drush cc all
?
[ Редагувати для уточнення : Основна проблема, яку я маю, - це відновлення кешу , яке (a) потребує певного часу та (b) блокування всіх інших запитів до завершення відновлення. Я хотів би знайти спосіб зробити так, щоб відбудови не були настільки смертельними в часи великого руху.]