We recently upgraded from subversion 1.6 to 1.8.5.
After upgrading we have discovered a major performance issue when accessing
some repositories from a remote site.
After much investigation I've discovered that the problem only becomes
obvious for repositories with large svn:mergeinfo properties.
I can reproduce the problem by creating a dummy repository as follows:
#!/bin/bash
svnadmin create test_svn
tempdir=$(mktemp -d)
svn co file://$PWD/test_svn $tempdir
for i in {1..400}; do
svn mkdir --parents $tempdir/trunk/dir-$i
for j in {1..1}; do
echo Test file $j>$tempdir/trunk/dir-$i/file-$j
svn add $tempdir/trunk/dir-$i/file-$j
done
done
for i in {1..1000}; do
echo "branches/branch-$i:1-2">>$tempdir/mergeinfo
done
svn ps svn:mergeinfo -F $tempdir/mergeinfo $tempdir/trunk
svn ci -m "Setup" $tempdir
rm -rf $tempdir
If I vary the number of directories created and the number of lines added
to the svn:mergeinfo property I get the following results doing an "ls -R"
on the trunk (accessing the repository via svnserve over the slow network
link):
mergeinfo lines: 1000, directories: 100, time: 23s
mergeinfo lines: 1000, directories: 200, time: 46s
mergeinfo lines: 1000, directories: 400, time: 92s
mergeinfo lines: 500, directories: 400, time: 45s
mergeinfo lines: 250, directories: 400, time: 23s
mergeinfo lines: 125, directories: 400, time: 13s
mergeinfo lines: 30, directories: 400, time: 4s
no mergeinfo, directories: 400, time: 3s
The problem only occurs when accessing the repository from the remote site
(relatively slow, busy link). On the local network the command completes
within 1s.
The problem only occurs using svnserve. Accessing the same repository via
http seems OK (mergeinfo lines: 1000, directories: 400, time: 4s)
Increasing the number of files in each directory (e.g. from 1 to 20) makes
virtually no difference to the timings.
"info -R" commands are affected in a similar way.
As well as 1.8.5, I've tried using 1.8.0 & 1.8.8 on the server but it made
no difference.
However, using 1.7.9 on the server (accessing using a 1.8.5 client) I get:
mergeinfo lines: 1000, directories: 400, time: 3s
So, this problem seems to have been introduced with 1.8.
The problem doesn't appear to be affected by the client version.
I've tried accessing the repository using an old 1.4.3 client and get the
same performance issue as using a 1.8.5 client.
Does this make sense to anyone?
Why should the size of the svn:mergeinfo property affect "ls -R" commands?
I haven't managed to measure the network traffic yet but I assume that, for
some reason, svnserve is transmitting a lot of unnecessary information?
Thanks,
David Matthews
Received on 2014-03-18 13:24:06 CET