虚拟机上安装TFS,源代码管理操作反应可能会比较慢

英文版本

症状:

有客户报告当他们的TFS2008服务器完全是基于虚拟机(如VMWare或hyper-V)的情况下,源代码操作的服务器端响应可能会比较慢。具体症状有:

  • 较大规模的源代码管理操作,比如在较大范围上作撤销已有变更集/打标签/迁入等操作时,服务器端响应可能会需要几分钟时间,极端情况下甚至会出现超时错误;
  • 当错误发生时,观察SQL Server则会发现CXPACKET 和PAGEIOLATCH_SH 等待类型。同时操作系统性能观察器上能看到出现比较高的硬盘操作队列(disk queue)和较高的硬盘使用率(% Disk);
  • TFS应用层服务器上的事件察看器出现一些包含SQL Server 超时(“timeout expired”)错误。

原因和解决方案:

TFS版本操作的很大一部分逻辑是在SQL Server中通过存储过程实现的,其中涉及大量临时表操作,以及硬盘输入输出操作。一旦SQL Server因为某种原因性能下降,TFS版本管理操作性能就会明显受影响。

出现以上症状的一个常见原因是在某些虚拟机配置下,SQL Server 硬盘输入输出操作比较慢。解决方法是调整虚拟机配置,提高硬盘I/O速度,或者将SQL Server转移到一台专用虚拟机上,甚至将SQL Server移到一台物理机。

更多信息:

SQL Server的超时分为连接超时和命令超时。 管理员可以通过修改%program files%/Microsoft visual studio {version} team foundation server/web services/web.config文件中的SQLTimeOut 值来调整TFS应用层 SQL Serve 命令超时时间,修改%program files%/Microsoft visual studio {version} team foundation server/web services/services/web.config 文件中的连接字符串来定义(比默认时间长的)连接超时时间。修改以上值不会提高版本控制操作的性能,但是至少可以让SQL Server 超时错误不那么容易被触发。

相关文档:

1. TFS在虚拟机上部署时的性能问题注意事项

https://blogs.msdn.com/bharry/archive/2008/06/27/tfs-on-hyper-v.aspx

https://blogs.msdn.com/charles_sterling/archive/2006/11/22/how-to-boost-tfs-performance-under-a-vm-by-dugie.aspx and

https://msdn.microsoft.com/en-us/library/dd904316.aspx

2. TFS硬件需求推荐值

https://msdn.microsoft.com/en-us/library/ms400687(VS.80).aspx