什么是SNIReadSyncOverAsync,为什么需要很长时间才能完成?

什么是SNIReadSyncOverAsync,为什么需要很长时间才能完成?

问题描述:

在我们的ASP.Net网站上,我们有一些请求超时。 AppDynamics显示SQL过程调用在几秒钟内就会返回,但我们在SNIReadSyncOverAsync中花费了100多秒。什么是SNIReadSyncOverAsync,为什么需要很长时间才能完成?

有没有人知道这种方法是做什么的,为什么会花费那么多时间?我们没有使用在每个问题/帖子中引用的EF,我已经能够找到它。

在此先感谢

更新

它已经有一段时间,虽然我们未曾来决议,为什么所有的时间用在SNIReadSyncOverAsync正在度过的,我有几个想法。

我认为在这种情况下,它可能是特定版本的AppDynamics报告SQL调用花费的时间的方式,但我没有真正的数据来支持这一点,只是我从我观察到的。我们最终不再看到所报告的时间是在SNIReadSyncOverAsync中花费的时间,而是转移到查询本身超时。

这仍然没有做很多,因为相同的查询会立即在同一个数据库的SSMS上运行。

最终的答案最终与ARITHABORT有关,导致我们的应用程序和SSMS使用两种不同的执行计划(请参阅https://dba.stackexchange.com/a/9841),解释了为什么我们无法使用SSMS重现超时。一旦我们解决了这个问题,我们就能够确定需要调整的过程的一些部分,并且自那以后我们还没有遇到不明原因的超时或SNIReadSyncOverAsync。

+0

MS的任何更新? – too 2014-06-10 11:41:55

+0

不幸的是,我们无法解决问题。更奇怪的是,更新版本的AppDynamics不再在SNIReadSyncOverAsync方法中显示问题,而是在DbDataAdapter.Fill – 2014-07-02 21:54:05

不确定您是否已经解决了这个问题,但是:SNI是SQL Server网络接口,并且在大多数等待SQL Server数据的ADO.NET完全调用堆栈中存在上述方法。这与高层实现是EF还是原始的ADO.NET或其他无关。

我不确定AppDynamics使用哪个度量或信号来捕获存储过程执行的完成情况,但是如果存储过程完成得相对较快,但您可能会看到这种行为,但从服务器传输查询结果给你的客户需要一段时间。

不知道更多关于您的基础设施的信息,很难进一步提供帮助。如果问题仍然存在,我建议在SQL Server Management Studio中使用SET STATISTICS TIME ON和“包括客户端统计信息”开启相同的查询。也许这些数字会给你一个关于数据传输是否确实是问题的想法。

+0

我实际上已经有一个支持案例用MS打开。虽然没有强有力的线索。如果我得到答案,我会更新。 感谢SET STATISTICS的提示。 – 2013-06-14 15:41:17

+3

您是否曾收到过Microsoft @ ryan.rousseau的有用回复? – 2016-07-27 16:47:42

就我的情况而言,正如Jouni所说的那样,查询结果的传输非常缓慢。我使用Automapper准备发送给客户端的数据。所以,目前还不清楚究竟是什么性质造成的负载,但要确保我已经削减了所有不需要在客户端显示的复合内容。 (我最初需要一个集合在客户端以网格显示。)执行变得非常快。