Очистка хранилища данных
В целом Pimcore практически не требует обслуживания в плане очистки файловой системы от временных файлов, логов, информации о версиях и других генерируемых данных. Однако существуют определенные приемы, которые можно использовать для уменьшения объема занимаемого дискового пространства.
Данные версий
Уменьшение количества шагов версионирования для ассетов, объектов и документов
Pimcore хранит метаданные версий в базе данных, однако сами данные сохраняются в файловой системе (var/versions) в виде сжатых файлов (gzip), чтобы база данных оставалась максимально легкой.
Важно понимать, что Pimcore сохраняет полные дампы данных на момент создания версии; он не использует дифференциальное/инкрементное копирование или дедупликацию по ряду причин. Это означает, что данные версий могут расти очень быстро, особенно при работе с большими ассетами.
Вы можете индивидуально ограничить количество точек восстановления для ассетов, объектов и документов в Системных настройках (System Settings).
После уменьшения этого значения рекомендуется запустить следующую команду вручную (она также запускается автоматически в рамках регулярного скрипта обслуживания):
./bin/console pimcore:maintenance -j versioncleanup
Пример
Допустим, есть ассет размером 100 МБ, а в системных настройках указано 10 шагов версионирования. Каждый раз при сохранении ассета создается новый дамп файла, поэтому максимальное пространство, необходимое для этого конкретного ассета, составит 1,1 ГБ (100 МБ оригинал + 10 x 100 МБ дампы версий).
Удаление всех версий определенного типа
Иногда необходимо очистить всю информацию о версиях для определенного типа, например, для ассетов или объектов. Проще всего сделать это вручную с помощью следующих команд:
ВНИМАНИЕ: Следующие команды удалят всю информацию о версиях в вашей установке
// замените ### на имя вашей базы данных
// вы также можете использовать "object" или "document" вместо "asset"
mysql -e "DELETE FROM ###.versions WHERE ctype='asset';"
rm -r var/versions/asset
Данные логов
Вся информация логов находится в var/log/. Pimcore автоматически ротирует, сжимает и очищает логи:
Ротация: когда файл становится больше 200 МБ
Сжатие: сразу после ротации (gzip)
Удаление: через 30 дней
Логи можно удалить вручную в любое время.
Также можно использовать сторонний ротатор логов, для этого отключите задачу logmaintenance в команде обслуживания:
./bin/console pimcore:maintenance -J logmaintenance
Временные файлы
Pimcore хранит временные файлы в двух разных местах, в зависимости от того, являются ли они публично доступными.
Приватная временная директория: var/tmp/
Используется для загрузок, импорта, экспорта, предпросмотра страниц и т.д.
Публичная временная директория: public/var/tmp/
Используется для миниатюр (thumbnails) изображений, видео и документов, используемых в веб-приложении.
Очистка временных файлов
// очистка публичных файлов
Tool\Storage::get('thumbnail')->deleteDirectory('/');
Db::get()->executeQuery('TRUNCATE TABLE assets_image_thumbnail_cache');
Tool\Storage::get('asset_cache')->deleteDirectory('/');
// очистка системных файлов
recursiveDelete(PIMCORE_SYSTEM_TEMP_DIRECTORY, false);
Все временные файлы можно удалять в любое время.
ВНИМАНИЕ: Удаление всех файлов в public/var/tmp/ может сильно повлиять на производительность до тех пор, пока все необходимые миниатюры не будут сгенерированы заново.
Корзина
Удаление элементов в Pimcore сначала перемещает их в корзину. Корзина работает аналогично версионности:
ссылки сохраняются в БД, а содержимое дампится в файлы в var/recyclebin/.
В административном интерфейсе (Tools > Recycle Bin), вы можете просмотреть элементы или очистить всё содержимое.
Если вам нужно удалить элементы по сроку их хранения, используйте команду:
./bin/console pimcore:recyclebin:cleanup --older-than-days=60
Также можно очистить корзину вручную (полезно для автоматизации или при огромном количестве элементов):
// замените ### на имя вашей базы данных
mysql -e "TRUNCATE TABLE ###.recyclebin;"
rm -r var/recyclebin
ВНИМАНИЕ: Корзина — это административный инструмент, который отображает удаленные элементы любого пользователя. Из-за сложности процесса восстановления этот инструмент должен быть зарезервирован для администраторов и опытных пользователей.
Кэш вывода (Output Cache)
Если включено, полностраничное кеширование сохраняет весь ответ фронтенд-запроса (включая заголовки) в кэш.
Очистить кэш вывода можно следующим фрагментом кода:
// удаляем "output" из игнорируемых тегов, если указано время жизни кэша
Cache::removeIgnoredTagOnClear('output');
// очищаем кэш документов
Cache::clearTags(['output', 'output_lifetime']);
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.