本文档旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。

服务器优化

提供 Subversion 服务器等服务时,需要进行容量规划和性能调优。Subversion 在 CPU 周期和内存等服务器资源方面通常并不贪婪,但任何服务都可以从优化中受益,尤其是在服务使用量激增时[63]。在本节中,我们将讨论一些可以调整 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) 上,让服务器压缩其网络传输(这也迫使客户端解压缩它们)可能没有意义,因为网络本身非常快,用户不会真正从更小的整体网络负载中受益。另一方面,主要由具有低带宽连接的客户端访问的服务器通过最小化其网络通信的总体大小来为这些客户端提供帮助。



[63] 在 Subversion 的情况下,飙升的影响当然归因于它很酷的名字。好吧,还有它的流行度、可靠性、易用性……。

TortoiseSVN 官方中文版 1.14.7 发布