2017-09-26 53 views
0

我有一个不寻常的问题,因为我的一台服务器的性能比其他所有服务器都好,我想知道为什么 - 这样我就可以让其他人也能工作:-)通过网络对SQL的.NET访问比本地更快 - 嗯,为什么?

这是我的)场景: 我有一个SQL Server 2012盒子,这是我们的生产环境 - 我们称之为PROD。我有一个我们创建的.NET工具,一次又一次地运行一些查询。如果我在与本地数据库交谈的服务器上运行此工具,则对于一组简单查询,我得到的响应时间在4到20毫秒之间,对于更复杂的查询,响应时间在589到731毫秒之间。

我们还有另一个相同规格的SQL Server 2012盒 - 我们称之为STAG。如果我在这个盒子上运行相同的工具,连接到PROD数据库(即相同的代码,相同的连接字符串等),我会得到简单查询的响应时间在0到1毫秒之间,对于更复杂的查询响应时间为109到133毫秒,即明显更好。

我们有第三个相同规格的SQL Server 2012盒子 - 我们称之为TEST。再次运行连接到PROD的相同工具,我分别得到4到15和600到800毫秒的响应时间。

实际上,如果我在除STAG环境之外的任何服务器(或客户端)上运行此工具,则时间大致相同。这仅仅是STAG出了所有其他环境,我真的想知道为什么!

如果我在SSMS中运行查询,那么它们都是高性能的(即像期望的那样非常快)。

因此,似乎在大多数机器上,从.NET访问数据库都有一个开销,除了我们的STAG服务器之外,我希望我们的所有服务器都具有这种级别的性能。

事情我已经检查,均出现匹配:

  • SQL客户端和服务器协议和配置
  • 底层硬件(它在相同的vSphere基础架构所有正在运行)
  • 的.NET Framework版本
  • AV版和政策应用

我不知所措知道要检查些什么 - 任何人都可以提出任何建议吗?

感谢

马克

+1

分析它。我的意思是,*实际*分析它,没有比较设置或假设事物应该是相同的。使用Wireshark跟踪网络流量并查看数据包延迟,“SET STATISTICS TIME ON”,查询计划。首先要做的是确定差异是由于SQL Server中的查询执行还是底层网络/ CPU /内存基础架构造成的。我的钱就是后者。 (虚拟硬件也是硬件,它可能比物理硬件表现得更加奇怪) –

+0

我倾向于同意你的看法,即它不是SQL Server相关的,因为它在上面提到的设置中在SSMS中运行相同的查询,需要0ms - 你不能比这更快!另外,从STAG服务器访问PROD更快的事实告诉我,这与.NET本身有关,因为查询数据库的其他方法正在迅速减轻。 我会看看wireshark的东西,但再次说服务器自己说话比其他服务器慢,这也似乎很奇怪。 –

+0

使用Wireshark,我可以看到TEST服务器的数据发送和接收比STAG慢30ms,这对我来说显示PROD服务器的网络和底层硬件不是问题 - 它必须是介于代码的运行和消息通过网络 - 在.NET System.Data.SqlClient的内部也许?但是,这不就像我们使用的黑匣子吗? –

回答

0

右键 - 我终于跟踪下来,它是不是很大,但至少我有一致性。 我们在工具的计算时序逻辑有一个错误 - 我们使用TimeSpan.TicksPerMillisecond以及由于某种原因,Stopwatch.Frequency是对我们的服务器8-一个不同@

切换到秒表.StartNew(),然后停止()并使用ElapsedMilliseconds给我们正确的答案。

感谢Jeroen为您提供的所有帮助 - 至少在下次出现性能问题时,我可以采纳您的建议并首先运行。