本文本尚在编写中,内容可能随时更改,可能无法准确反映 Apache™ Subversion® 软件的任何发布版本。 将此页面加入书签或以其他方式推荐给其他人可能不是一个明智的选择。 请访问 https://svnbook.subversion.org.cn/ 以获取本书的稳定版本。

服务器优化

在提供 Subversion 服务器等服务时,尽职调查的一部分包括容量规划和性能调整。 Subversion 在服务器资源(如 CPU 周期和内存)方面并不特别贪婪,但任何服务都可以从优化中获益,尤其是在服务的使用量激增时[73]。 在本节中,我们将讨论一些方法,您可以通过这些方法调整 Subversion 服务器配置,以提供更好的性能和可扩展性。

数据缓存

一般来说,Subversion 服务器工作中最昂贵的的部分是从存储库中获取数据。 Subversion 1.6 试图通过引入对从存储库读取的某些类别数据的内存缓存来抵消这种成本。 但是 Subversion 1.7 进一步扩展了这一点,不仅缓存了一些代价更高的操作的结果,而且还在每个可用的服务器中提供了微调缓存大小和某些行为的方法。

对于 svnserve,您可以使用 --memory-cache-size (-M) 命令行选项指定缓存的大小。 您还可以通过布尔型 --cache-fulltexts--cache-txdeltas 选项分别指示 svnserve 是否尝试缓存内容全文和增量。

$ svnserve -d -r /path/to/repositories \
           --memory-cache-size 1024 \
           --cache-txdeltas yes \
           --cache-fulltexts yes
…
$

mod_dav_svn 通过 httpd.conf 指令提供相同程度的缓存可配置性。 可以使用 SVNInMemoryCacheSizeSVNCacheFullTextsSVNCacheTextDeltas 指令在服务器配置级别控制 Subversion 的数据缓存特性

<IfModule dav_svn_module>
  # Enable a 1 Gb Subversion data cache for both fulltext and deltas.
  SVNInMemoryCacheSize 1048576
  SVNCacheTextDeltas On
  SVNCacheFullTexts On
</IfModule>

那么您应该使用什么设置呢? 当然,您需要考虑服务器上可用的资源。 为了从缓存中获得任何好处,您可能需要让缓存至少足够大以容纳存储库中最常访问的所有文件(例如,项目的 trunk 目录树)。

[Tip] 提示

将内存缓存大小设置为 0 将禁用此增强的缓存机制,并导致 Subversion 回退到使用 Subversion 1.6 中引入的旧缓存机制。

[Note] 注意

目前,只有使用 FSFS 后端数据存储的存储库才使用此数据缓存功能。

网络数据压缩

压缩通过网络传输的数据可以大大减小这些网络传输的大小,但代价是服务器(和客户端)CPU 周期。 根据服务器的 CPU 容量、使用服务器的客户端的典型访问模式以及它们之间网络的带宽,您可能希望微调服务器在压缩其通过网络发送的数据时的工作强度。 为了帮助进行此微调过程,Subversion 1.7 为 svnserve 提供了 --compression (-c) 选项,为 mod_dav_svn 提供了 SVNCompressionLevel 指令。 两者都接受一个值为 0 到 9(含)之间的整数,其中 9 提供最佳的网络数据压缩,而 0 完全禁用压缩。

例如,在具有 1 吉比特连接的局域网 (LAN) 上,可能没有必要让服务器压缩其网络传输(这也迫使客户端解压缩它们),因为网络本身非常快,用户不会真正从较小的整体网络负载中获益。 另一方面,主要由具有低带宽连接的客户端访问的服务器会通过最小化其网络通信的总大小来帮助这些客户端。



[73] 在 Subversion 的情况下,激增的影响当然归功于它很酷的名称。 当然,还有它的流行度、可靠性、易用性……。

TortoiseSVN 官方中文版 1.14.7 发布