该应用程序告诉它在数据库调用中花了零毫秒,数据库表示完成其工作需要3毫秒,谁相信?

时间:2014-09-15 15:17:23

标签: sql-server

有一个时间关键的应用程序处理来自交易服务器的消息,我们每秒大约10K msgs ...有时候应用程序往往花费大量时间在数据库中进行插入...经过几天与开发团队来回讨论哪一方花时间,我们的数据库团队决定构建一个简单的C#应用​​程序,该应用程序驻留在同一机架上的服务器上,与数据库服务器位于同一网络上。有问题的数据库是sql server 2012标准。

时间是以这种方式从ado.net获取的......

var currT1 = DateTime.Now;                                                     
sqlComm.ExecuteNonQuery();
var loadT = DateTime.Now;

来自sql server的时间来自服务器端跟踪的startTime和endTime列......这两个服务器是时间同步的,但差异为10-15 ms ...

现在让我想要对某些东西感到震惊的是,虽然可以理解应用程序需要的时间比db(因为它必须处理以及其他东西)...但在某些情况下,数据库报告花了4毫秒,但应用说它花了零毫秒!!

我肯定认为这个错误与测试应用程序有关......但是没有什么可以将db调用与两个时间戳分开...日志读取如下...应用时间(开始,结束,差异,方法)跟随通过db调用(starttime,endtime,diff)

10:46:06.716    
10:46:06.716    
0:00:00.000 
DataAdapter     
10:46:06.697    
10:46:06.700    
0:00:00.003

还有什么我应该提供的吗?

1 个答案:

答案 0 :(得分:0)

根据您的观察结果,我们使用了秒表类......然后我们得到了一个更奇怪的问题...我们使用了秒表。经过了一个属性,认为将它除以10会给我们微秒。 。服务器端跟踪中的持续时间列以微秒为单位,因为它已保存到file。仍然,应用程序的时间少于数据库...事实证明,要使用的属性是elapsed.tick而不是获取microseconds的elapsedtick属性。将elapsed.tick除以10给了我们微秒......

所以它是......让应用程序和数据库都给我们非常接近准确(不能确定:) :)次...

我得出的结论是,不仅不相信datetime.now .net属性,而且还有startTime和endTime服务器跟踪列...从专用计时器计算持续时间是必需的......

感谢排队的人......