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

Posted

技术标签:

【中文标题】什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?【英文标题】:What is SNIReadSyncOverAsync and why would it take a long time to complete? 【发布时间】:2013-02-06 05:58:04 【问题描述】:

在我们的 ASP.Net 网站上,我们遇到了一些请求超时。 AppDynamics 显示 SQL 过程调用在几秒钟内返回,但我们在 SNIReadSyncOverAsync 中花费了 100 多秒。

有谁知道这个方法是什么/做什么以及为什么要花这么多时间?我们没有使用我能够找到的每个问题/帖子中都引用的 EF。

提前致谢

更新

已经有一段时间了,虽然我们从未就为什么所有时间都花在 SNIReadSyncOverAsync 上达成一致,但我有一些想法。

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

这仍然没有多大意义,因为相同的查询会立即在 SSMS 中的同一数据库上运行。

最终答案与 ARITHABORT 相关,导致我们的应用程序和 SSMS 使用两种不同的执行计划(请参阅 https://dba.stackexchange.com/a/9841),这解释了为什么我们无法使用 SSMS 重现超时。

一旦我们解决了这个问题,我们就能够确定需要调整的程序的几个部分,并且自那以后我们没有遇到无法解释的超时或 SNIReadSyncOverAsync。

【问题讨论】:

很遗憾,我们无法解决问题。更奇怪的是,较新版本的 AppDynamics 不再在 SNIReadSyncOverAsync 方法中显示问题,而是在 DbDataAdapter.Fill 【参考方案1】:

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

我不确定 AppDynamics 使用哪个指标或信号来捕获存储过程执行的完成情况,但如果您的存储过程相对较快地完成,但将查询结果从服务器传输到您的客户需要一段时间。

如果不了解您的基础架构的更多信息,就很难提供进一步的帮助。如果问题仍然存在,我建议在 SQL Server Management Studio 中运行相同的查询,同时打开 SET STATISTICS TIME 并打开“包括客户端统计信息”。也许这些数字会让您了解数据传输是否真的是问题所在。

【讨论】:

我实际上有一个与 MS 相关的支持案例。虽然还没有强大的领先优势。如果我得到答案,我会更新。感谢您提供有关 SET STATISTICS 的提示。 您是否收到过来自 Microsoft @ryan.rousseau 的有用回复?【参考方案2】:

就我而言,正如 Jouni 所提到的,查询结果的传输确实非常缓慢。我使用 Automapper 准备发送给客户端的数据。因此,目前尚不清楚究竟是什么属性导致了负载,但要确保我已经删除了所有不需要在客户端显示的复合属性。 (我最初需要一个集合在客户端的网格中显示。)执行变得非常快。

【讨论】:

【参考方案3】:

我遇到过类似的问题 - 如果您提前从大选择中中断,SqlDataReader.Dispose 可能会卡住很长时间。

见:https://github.com/dotnet/corefx/issues/29181

【讨论】:

以上是关于什么是 SNIReadSyncOverAsync,为什么需要很长时间才能完成?的主要内容,如果未能解决你的问题,请参考以下文章

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

什么是帧数?什么是FPS?什么是PING?什么是延迟?什么是延时?什么是延迟时间?什么是时延?.

什么是PP,PE.什么是均聚..什么是共聚..什么是嵌段..什么是无规,什么是注塑。什么是吹膜..什

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是拉电流,什么是灌电流?什么是吸收电流 ?

在java中,OOA是什么?OOD是什么?OOP是什么?