Нашел пост про быстрое удаление файлов «Так как же удалить миллионы файлов из одной папки?», но многие решения учитывают только одну папку и игнорируют вложенные. Когда на сервере скапливается множество вложенных папок и гигантское количество файлов (например, на proxy) приходится их удалять и пробовать разные варианты.
Хочу поделиться результатом нескольких экспериментов.
Выбор варианта проводился на 3х файловых системах: ext3,RiserFS и XFS (оказалась быстрее, хотя файлы и небольшие, по 300 кб).
Раздел монтировался удаленно по NFS.
Создавалось 11 миллионов файлов (чунки от 900 потоков в 4 битрейтах) и на директории (900) выполнял разные варианты удаления.
Чтобы примерно повторить эксперимент (создадим 110 тыс. файлов и удалим их), можно выполнить в баше:
Теперь сравним число системных вызовов и время выполнения при рекомендованном варианте:
В найденном ниже варианте 227 системных вызова вместо 110 тысяч и время выполнения в 6 раз меньше:
Этот вариант показал самые лучшие варианты по быстродействию и раньше я его нигде не встречал.
Хочу поделиться результатом нескольких экспериментов.
Выбор варианта проводился на 3х файловых системах: ext3,RiserFS и XFS (оказалась быстрее, хотя файлы и небольшие, по 300 кб).
Раздел монтировался удаленно по NFS.
Создавалось 11 миллионов файлов (чунки от 900 потоков в 4 битрейтах) и на директории (900) выполнял разные варианты удаления.
Чтобы примерно повторить эксперимент (создадим 110 тыс. файлов и удалим их), можно выполнить в баше:
mkdir -p del{2,110.000} && time touch del110.000/{1..110000}
real 0m2.346s
user 0m0.344s
sys 0m1.984s
Теперь сравним число системных вызовов и время выполнения при рекомендованном варианте:
time strace -c rm -rf del110.000 2>&1| awk '/total/{print $3}'
110308
real 0m9.555s
user 0m0.760s
sys 0m6.128s
В найденном ниже варианте 227 системных вызова вместо 110 тысяч и время выполнения в 6 раз меньше:
mkdir -p del110.000 && touch del110.000/{1..110000}
time strace -c rsync -a --delete del2/ del110.000/ 2>&1| awk '/total/{print $3}'
227
real 0m1.507s
user 0m0.156s
sys 0m1.292s
Этот вариант показал самые лучшие варианты по быстродействию и раньше я его нигде не встречал.