Репозиторий SVN объемом 350 ГБ создает по крайней мере 1 МБ ревизии даже для самой простой задачи, такой как ветка / тег - PullRequest
6 голосов
/ 12 октября 2010

Все началось, когда я заметил, что размер моего хранилища увеличивается со скоростью 1 ГБ в день. Я сделал простой тест. Создал ветку / тег существующей папки размером 35 КБ. Я принял к сведению номер ревизии и пошел к $REPO/db/revs/<K-rev>/rev-number/ и проверил размер ревизии. Это был 1 мегабайт. Это звучит подозрительно. Любые идеи о том, что здесь может быть не так. Размер моего репо составляет около 350 ГБ с 600 000 ревизий.

P.S. Я уже приступил к перестройке всего хранилища, чтобы понять, имеет ли это какое-то значение, но, вероятно, это займет несколько дней.

Ответы [ 2 ]

7 голосов
/ 13 октября 2010

Отправил тот же вопрос по адресу users@subversion.sapache.org и получил ответ от B Smith-Mannschott, который все объясняет.У меня есть каталог в пути, который содержит 16000 папок - для каждого коммита.Спасибо B Smith-Mannschott за подробный ответ.Публикация ответа здесь для других.


Содержит ли ваш репозиторий каталог с очень большим количеством записей?Являются ли изменения, которые приводят к большим коммитам, вносимым в такой каталог или ниже, в такой каталог?

Давайте предположим, что в вашем репозитории будет зафиксировано одно изменение в одном файле.Предположим далее, что файл находится здесь, в вашем хранилище:

/ project / trunk / some-реально-big-directory / notes / blah.txt

Когда вы фиксируете изменение в blah.txt, новая редакция перезапишет узлы каталогов между 'blah.txt' и корнем хранилища: / project / trunk / some-реально-big-directory / notes, / project / trunk / some-реально-large-каталог, / project / trunk, / project, /.При перезаписи узла каталога FSFS всегда сохраняет новую версию целиком.(Это отличается от способа хранения изменений в файлах, которые обычно отличаются от предыдущей версии того же файла.)

Если / project / trunk / some-реально-large-directory / содержит,скажем, 10000 файлов, то каждый коммит в blah.txt будет хранить полную копию этого каталога (с 10'000 именами) в вашем хранилище.

Я заметил это, когда начал держать личную вики под контролем версий.пару лет назад.Это был простой каталог из более чем 10 000 текстовых файлов.Я быстро заметил, что коммиты были довольно большими.(С тех пор я переключился на git для этой задачи, по этой и другим причинам.)

см. Также http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-up

0 голосов
/ 16 ноября 2018

Есть очень простое решение. Предполагая, что ваш репозиторий содержит огромное количество исторических тегов, вы можете переместить их в /tags-archive и сделать этот каталог доступным только для чтения. Когда вы создадите новые теги в /tags, проблем больше не будет.

Обратите внимание, что вам нужно использовать URL для перемещения URL. Э.Г.

svn move https://svn.example.com/MyRepo/tags https://svn.example.com/MyRepo/tags-archive -m "Your Log Message"

Это решение помогло решить проблему с хранилищем, содержащим около 350 000 тегов в одном каталоге.

...