Команда du, используемая для получения данных о дисковом пространстве, занятом загруженными файлами, вызывала проблемы с производительностью моей административной панели. Да, у нас очень много загрузок изображений. Вместо полного отключения этой функции (у нас ведь есть панель мониторинга Grafana/Prometheus), я решил заменить её на гораздо более быстрое очень грубое приближение с использованием команды df. Это изменение, разумеется, может быть включено или отключено администратором; по умолчанию используется du.
Я отправил PR с этим изменением. Это мой первый PR, так что, пожалуйста, отнеситесь с пониманием :))
У вас есть приблизительное представление о том, сколько времени занимала команда du в вашем случае? Мне не очень нравится этот подход к решению проблемы с производительностью, и я считаю, что есть две альтернативы:
Просто использовать Upload.sum(:filesize).to_i + OptimizedImage.sum(:filesize).to_i для определения uploads_used_bytes, как мы делаем для внешних хранилищ.
Внедрить фоновую задачу, которая периодически пересчитывает объем данных, занимаемый загрузками, и кэширует его в Redis.
Лично я больше склоняюсь к варианту (1), так как это гораздо более простое решение. Мы немного теряем в точности, но нам не нужна 100% точность здесь. Тем не менее, это будет намного лучше, чем приближенное значение, которое мы получаем от df.