svn更新缓慢(在1Mb存储库上超过15分钟)

时间:2012-07-11 07:43:09

标签: svn

在我们的实时服务器上运行svn update有时需要15分钟才能完成。

  1. 我们的存储库非常小,大约1Mb,有大约100个文件(这是一个小网站)
  2. 我们有几个开发人员同时提交/更新,这是非常好的
  3. 我们更新服务器上的所有更改(只有svn update)并且运行速度非常慢
  4. 我们从未在服务器上做过svn commit(它应该是我们网站的只读版本)
  5. 随着时间的推移,在服务器上执行svn update似乎越来越慢,即使它只是一个需要更新的文件。我开始认为我们服务器上存储库的“年龄”与速度有多慢?如果是这样,我们可以做些什么来加快它的速度?

    更新#1

    我仍然认为“年龄”与svn update缓慢有关,但可能需要考虑服务器上存储库“年龄”时实际发生的事情......

    我认为这是以下原因:

    1. 我们已经检查了WebsiteA上的存储库(使用svn checkout)并自2010年1月起定期更新(使用svn update
    2. 我们也以相同的方式在WebsiteZ上检查了相同的存储库,但这只发生在几天前,即2012年7月
    3. WebsiteA和WebsiteZ都在同一个物理服务器上,两者都使用相同的存储库
    4. 在WebsiteA上运行svn update以从版本100更新为101需要20多分钟
    5. 在WebsiteZ上运行svn update以从版本100更新为101只需几秒钟
    6. 我可以看到这些网站之间的唯一区别是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秒内运行。

2 个答案:

答案 0 :(得分:1)

我建议使用svnadmin dumpsvnadmin load重建subversion存储库(在备份之后!),例如manual中所述。可能是在通过旧版本升级时导致存储库中存在一些异常。你说这是一个旧的存储库,所以这可能就是这种情况。进行转储 - >加载周期意味着Subversion可以以当前格式创建更优的存储库。

答案 1 :(得分:0)

SVN将源文件和等量的元数据(.svn目录)写入本地磁盘。如果网络不是问题,您还可以检查磁盘性能。我遇到过SAN磁盘速度慢(网络延迟,本地和远程数据之间的错误检查等)的情况,并导致SVN延迟。通常在这种情况下,本地磁盘应该更好。您可以尝试以下方法:

  • 如果可能,请将svn export与存储库和svn守护程序运行在同一服务器上。如果它在那里运行得更快,那么它就是网络或磁盘。
  • 如果其他客户端/ dev计算机上的svn export运行得更快,那么它应该是磁盘。

我怀疑存储库的年龄是否与性能有关。

希望这有帮助。

相关问题