在我们的实时服务器上运行svn update
有时需要15分钟才能完成。
svn update
)并且运行速度非常慢svn commit
(它应该是我们网站的只读版本)随着时间的推移,在服务器上执行svn update
似乎越来越慢,即使它只是一个需要更新的文件。我开始认为我们服务器上存储库的“年龄”与速度有多慢?如果是这样,我们可以做些什么来加快它的速度?
更新#1
我仍然认为“年龄”与svn update
缓慢有关,但可能需要考虑服务器上存储库“年龄”时实际发生的事情......
我认为这是以下原因:
svn checkout
)并自2010年1月起定期更新(使用svn update
)svn update
以从版本100更新为101需要20多分钟svn update
以从版本100更新为101只需几秒钟我可以看到这些网站之间的唯一区别是WebsiteA已经存在了一段时间。 WebsiteA可能有一些额外的文件(缓存内容),虽然这是非常小的(少于20个文件),并且包含缓存文件的目录已设置为使用svn忽略所有文件:ignore。
我想我不能排除网络问题,但我认为WebsiteA和WebsiteZ会运行相同的防火墙设置,如果有规则,它将是“阻止”而不是“延迟”。由于两个网站都位于同一台服务器上,我认为它们应该在网络问题上以相同的时间更新。
更新#2
值得注意的是,如果我们svn update file.txt
它运行得非常快。这就好像svn正在比较我们在目录中的所有内容,只是为了找出要更新的内容。
更新#3
我们最终升级了svn并升级了所有签出的修订版。 svn update
现在似乎运行得更快,手指越过它就会保持这种状态。谢谢大家的帮助!!
更新#4
当然,做一个新的结账解决了这个问题,但只有几天/几周。我想终于今天我们发现svn的原因很慢。我们正在使用Zend_Auth并在每个页面上调用Zend_Auth :: hasIdentity()来检查用户是否已登录。此调用会创建一个会话,该会话又在服务器上创建会话文件。如果浏览器(或googlebot)在关闭Cookie的情况下进行浏览,我们会为每个请求创建一个会话文件。因此,我们的会话目录有数百万个文件。我们删除了目录中的文件,并通过在调用hasIdentity()之前检查cookie是否已设置来确定用户是否登录的方式。 svn
更新现在在< 30秒内运行。
答案 0 :(得分:1)
我建议使用svnadmin dump
和svnadmin load
重建subversion存储库(在备份之后!),例如manual中所述。可能是在通过旧版本升级时导致存储库中存在一些异常。你说这是一个旧的存储库,所以这可能就是这种情况。进行转储 - >加载周期意味着Subversion可以以当前格式创建更优的存储库。
答案 1 :(得分:0)
SVN将源文件和等量的元数据(.svn目录)写入本地磁盘。如果网络不是问题,您还可以检查磁盘性能。我遇到过SAN磁盘速度慢(网络延迟,本地和远程数据之间的错误检查等)的情况,并导致SVN延迟。通常在这种情况下,本地磁盘应该更好。您可以尝试以下方法:
svn export
与存储库和svn守护程序运行在同一服务器上。如果它在那里运行得更快,那么它就是网络或磁盘。svn export
运行得更快,那么它应该是磁盘。我怀疑存储库的年龄是否与性能有关。
希望这有帮助。