This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

服务器优化

在向用户提供 Subversion 服务时, 一个尽职的管理员还应该考虑容量规划 与性能调优. Subversion 对于服务器资源 (例如 CPU 和内存) 并不是非常贪婪, 但是任意一个服务都能从优化中获益, 特别是当服务的使用量像火箭一样急剧 上升时 [69]. 本节 我们将介绍如何调整服务器配置, 以便 Subversion 提供更好的性能与可扩展性.

数据缓存

一般来说, Subversion 服务器代价最高的工作就是从仓库中读取数据, Subversion 1.6 试图通过在内存中缓存特定种类的数据来减小这种代价. Subversion 1.7 在这方面走得更远, 它不仅缓存了代价较高的操作的执行 结果, 还向服务器提供了调整缓存大小与行为的方法.

对于 svnserve, 管理员可以通过命令行选项 --memory-cache-size (-M) 指定缓存 的大小, 还可以通过布尔选项 --cache-fulltexts--cache-txdeltas, 分别指定是否需要缓存文件内容的 全文本与差异文本.

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

mod_dav_svnhttpd.conf 提供了等价的缓存配置, 与上面三个 svnserve 命令行 选项对应的配置指令分别是 SVNInMemoryCacheSize, SVNCacheFullTextsSVNCacheTextDeltas:

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

那么, 应该把这些选项设置成什么值呢? 当然, 你需要考虑服务器的哪些 资源是可用的. 为了尽量从缓存中获益, 缓存的大小应至少能够存放仓库中最 常被访问的全部文件 (例如项目的主干分支 trunk).

[提示] 提示

把缓存大小设置成 0 将使得 Subversion 转而 使用 1.6 引入的旧的缓存机制.

[注意] 注意

到目前为止, 只有使用了 FSFS 作为后端存储的仓库才能利用本节 提到的缓存功能.

网络数据压缩

对数据进行压缩后再传输, 可以大大减少网络流量, 但这也会造成服务 器端 (和客户端) 消耗更多的 CPU 资源. 根据服务器的 CPU 能力, 客户端 访问服务器的典型模式, 以及客户端与服务器之间的网络带宽, 管理员可能会 想调整服务器应该尽多大的努力来压缩数据. 为了帮助管理员进行这种调整, Subversion 1.7 为 svnserve 提供了选项 --compression (-c), 为 mod_dav_svn 提供了配置指令 SVNCompressionLevel, 它们都接受一个 0 到 9 (含 9) 之间的整数, 9 表示尽最大努力压缩数据, 0 则禁止压缩.

比如说, 在一个 1 G 带宽的本地局域网 (LAN) 内, 服务器就没必要对 待传输的数据进行压缩 (如果服务器对数据进行了压缩, 客户端在接收到数据 后还要解压), 因为网速已经足够快了, 即使对待传输的数据进行压缩, 用户 也不会感觉到明显的性能提升. 另一方面, 如果访问服务器的大多数客户端, 其网络带宽都比较低, 那么对待传输的数据进行压缩可以大大改善用户检验.



[69] 对于 Subversion 而言, 如果它的使用量上升, 正好 说明了它是多么的受欢迎, 可靠和易于使用.