sql-server – ASP.NET WebAPI和IIS中的请求时间不一致

问题

我正在测试我们的一个AngularJS ASP.NET WebAPI应用程序的性能.我观察到的奇怪的事情是,与Fiddler不同的时间执行完全相同的查询.

这种行为不仅在服务器上而且在本地机器上也被观察到.

细节

该应用程序使用Chrome进行测试,并使用Angular JS版本1.3.8编写在ASP.NET WebAPI(Microsoft.AspNet.WebApi版本5.2.2)中.

服务器是带有SQL Server 2008和IIS 7.5的Windows Server 2008 R2.

我的本地机器是Windows 8.1与Visual Studio 2013和SQL Server 2014.

我注意到,根据Fiddler,完全相同的查询将以不同的时间执行(蓝色查询是相同的,而白色的查询是另一种完全相同的查询):

例如查询号码26的详细时间是:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:26.544
GotRequestHeaders:  17:27:26.544
ClientDoneRequest:  17:27:26.544
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:26.544
ServerGotRequest:   17:27:26.544
ServerBeginResponse:    17:27:26.554
GotResponseHeaders: 17:27:26.554
ServerDoneResponse: 17:27:26.554
ClientBeginResponse:    17:27:26.554
ClientDoneResponse: 17:27:26.554

    Overall Elapsed:    0:00:00.010

查询号28的详细时间是:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:29.104
GotRequestHeaders:  17:27:29.104
ClientDoneRequest:  17:27:29.104
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:29.104
ServerGotRequest:   17:27:29.104
ServerBeginResponse:    17:27:29.616
GotResponseHeaders: 17:27:29.616
ServerDoneResponse: 17:27:29.616
ClientBeginResponse:    17:27:29.616
ClientDoneResponse: 17:27:29.616

    Overall Elapsed:    0:00:00.512

正如我所说,他们是完全相同的查询(相同的标题,相同的数据等).

查询28在查询26之后1-2秒执行.

问题

这种行为的主要原因是什么?我应该在哪里搜索问题?奇怪的是,查询首先是快速,然后慢,然后再次快速等等.我没有理由问题与数据缓存有关.

如何精确测试服务器上的时间,以找出0.010和0.512秒之间的差距?差距超过50倍.

这不是一个有角度的问题,但是我将如何解决这个问题:

>使用这样的东西chrome extension for a REST API client来向终端发出请求. (您也可以使用以下内容:http://jmeter.apache.org/,但设置更复杂)
>运行这20次,节省时间.
>清空数据库,然后填充这个请求所需的表 – 只是几行数据.
>运行工具20次 – 存储时间.是否一致?如果在这一点上他们不一致,我会将代码视为罪魁祸首.

你打电话给外部服务吗?
>除了执行查询之外,加载数据时,服务是否做其他任何事情?
>使用像dotTrace一样的分析器来查看比它应该花费更多的时间. (实际上你应该从一开始就使用这个)

>如果时间仍然一致,请在数据库中加载更多数据,直到时间不一致.然后配置查询并开始优化它们.

现在,通过如何不一致的时间,我会假设该服务在加载该数据时做其他事情:外部服务调用..某事.

翻译自:https://stackoverflow.com/questions/29751350/inconsistent-request-timings-in-asp-net-webapi-and-iis

转载注明原文:sql-server – ASP.NET WebAPI和IIS中的请求时间不一致