On Wed, Sep 28, 2011 at 07:57:35AM -0600, Trevor Schaffer wrote:
> Server: Fedora Core 13 64-bit
> SVN: 1.6.16 running on Apache 2.2.16
>
> We have a repository that currently is in the 128K revision count, and is now standing at 40+GB in size. Over time it's been growing faster, and we noticed a trend on svn copies... the db/revs/* files are getting bigger over time.
>
> After cracking one open, and another random commit, I saw that the
> commit entry not only lists information about the current path and
> it's siblings, but it also enumerates all parents, and their siblings
> as well... all the way to the root.
Yes, this is how "cheap copies" in Subversion work.
There is no way of changing this.
It's called the "bubble up effect" which is described neatly at
http://red-bean.com/kfogel/beautiful-code/bc-chapter-02.html
> This is a big issue for us, as we
> do a lot of build tagging, which means that every build tag commit
> lists the other thousands of build tags as well, which is why they are
> growing over time. At the current size of 600KB/commit for a single
> svn copy into our /tags area, performing 20,000 commits covers about
> 12GB of size, which I think is quite significant. Truthfully,
> probably 30+GB of this repo is just svn copies worth of commits.
I am surprised that the copy references take that much space.
How deeply nested are the tag folders in the tree?
You could try to flatten out the hierarchy of your repository.
> In the meantime, I'm going to try to dump+load the repo in the hopes that there were some optimizations in svn 1.6 that will help. We've had this repo running for nearly 5 years, since svn 1.4.
Yes, try that. 1.6 and upwards support "representation-sharing" which
might cut down the size of the repository significantly.
You could also try packing your repositories with 'svnadmin pack'.
This will cause the repository to use less inodes and free up space
lost to disk blocks which aren't completely filled up with data.
I am curious about how you create tags. Do you really run 'svn copy'
or do you maybe use 'svn import' to create them (which would bloat the
repository significantly if representation-sharing is disabled)?
Received on 2011-09-28 16:23:35 CEST