Перейти к основному содержимому

Очистка хранилища данных

В целом 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']);


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.