我们有一个相当大的 SVN 存储库。我们添加的代码越多,执行 SVN 更新所需的时间就越长。我们添加了 svn:externals 到在某些项目中重复的文件夹,例如 FCK编辑器 在各种网站上。这有帮助,但没有那么多。

减少更新时间和提高 SVN 速度的最佳方法是什么?

有帮助吗?

解决方案

如果它是较旧的 SVN 存储库(或者甚至是相当新的,但未进行最佳设置),则它可能使用较旧的 BDB 样式的存储库数据库。 http://svn.apache.org/repos/asf/subversion/trunk/notes/fsfs 有关于新的注释。从一种更改为另一种并不太难 - 转储整个历史记录,使用文件系统的新 svn 格式重新初始化它并重新导入。同时过滤存储库转储以删除所有无用信息的签入也可能很有用(例如,我删除了某人签入的 20MB 以上的 tarball 文件)。

就一般速度而言 - 高质量(快速)硬盘驱动器和用于基于操作系统的缓存的额外内存在提高 SVN 工作速度方面将很难出错。

在客户端,如果您通过 PuttyAgent 设置了 tortoisesvn 以通过 SSH 访问外部存储库计算机,则还可以启用 SSH 压缩,这也会有所帮助。

编辑: SVN v1.5还具有 fsfs-reshard.py 该工具可以帮助将基于 FSFS 的 svn 存储库拆分为多个目录 - 这些目录本身可以链接到不同的驱动器轴上。如果您有数千个修订,这也会有所帮助 - 如果没有其他原因,只是在数千个文件中查找一个文件需要时间(并且您可以通过查看 IOwait 时间来判断这是否是一个问题)

其他提示

对包含工作副本代码的文件夹禁用病毒检查。这使我的更新速度提高了一倍。

这并不是一个真正的答案,但有趣的是,svn 如此 I/O 繁重的原因之一是它在 .svn/text-base 目录中存储每个文件的一个额外副本。这使得本地 diff 操作速度更快,但会占用大量硬盘空间和 I/O。

http://subversion.tigris.org/issues/show_bug.cgi?id=525 有详细信息。

听起来您在一个存储库中有多个项目。在适当的地方将它们分开会给你带来很大的推动。

据称,由于 Git 存储/处理更改的方式,Git 比 Subversion 快得多,但我没有第一手的经验。

确保您与服务器的连接速度尽可能快(千兆位以太网)。确保服务器阵列中具有快速磁盘。当然,只检查您需要的内容。

有一些常见的性能调整。SVN 的 I/O 非常繁重,因此可以选择更快的硬盘(两端)。为您的服务器添加更多内存。确保您的客户端有经过碎片整理的硬盘(适用于 Windows)。

您使用什么访问方法也很重要。存储在远程文件系统上的存储库(使用 file:/// 访问)将比 svnserve 或带有 mod_svn 的 Apache 慢得多。如果您的存储库位于简单的文件共享上,请考虑使用后者之一。

TotoiseSVN 默认情况下会在后台查看文件更改,我发现这会减慢我的机器速度。我更改了配置以排除所有内容,然后仅包含我签出的目录。您还可以关闭背景检查。这两个设置都位于图标叠加设置节点中。

有时,svn 操作缓慢,尤其是在有许多外部设备的情况下,与 DNS 相关。看起来 svn 对每个 svn:external 执行 DNS 查找,甚至是相对的。将 svn 服务器主机名添加到 /etc/hosts 或修复 resolv.conf 可能会很有用。

我根据自己的经验发现(即:不通过任何 实际的 测试),特别是如果 SVN 存储库服务器是远程的,使用外部似乎会减慢速度。如果您在多个地方有重复的代码(例如 FCK 编辑器),我倾向于坚持使用外部文件,因为保持这些文件同步和可管理比更新速度更重要 - 不过,您可以考虑使用符号链接来带来改为重复的代码。(如果您使用的是 Windows XP,则可以使用 交汇点).

我们将代码库分成了几个同级模块,并编写了 Ant 脚本,以便一名开发人员可以一次处理一个模块,而不必过多关心其他模块中发生的情况。

  • 顶级构建脚本触发所有模块构建脚本
  • 外部库是 不是 存储在 Subversion 中,而是使用 Apache Ivy 从网络驱动器中提取。(将其想象为内部 Maven 存储库)。
  • 模块之间的依赖关系也使用 Ivy 进行管理。

通常,开发人员需要每周更新整个树几次,但这可以在午餐/咖啡休息之前轻松完成。

使用读取访问权限(即限制对某些人/组的读取访问)会大大减慢存储库的速度。特别是当身份验证以某种特殊方式完成时,例如针对 Windows 域。当然,写访问权限也是如此,但写的频率低于读。限制写访问可能比限制读访问更重要

如果您的存储库根目录中有许多文件夹,并且您的本地副本反映了存储库,那么请尝试将整体本地副本分割成许多单独的可下载文件夹,并分别更新这些文件夹,这确实比一个大文件夹要快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top