2014-07-08 30 views
0

基本上我有一堆性能分析,[给予天真的实际操作]声称70%的时间花费在我们的Web应用程序在重负载下的同步,并且主要在数据读取器内部调用的SNIReadSyncOverAsync中。 (SNIReadSyncOverAsync实际上结束了坐在一个kernalbase.dll!WaitForSingleObjectEx)这将是有益的,看看这些等待是主叫方发起还是主叫发起。有没有办法从SQL Server中看到传入的缓冲区/记录?

有没有办法在Visual Studio争用或并发报告中看到(解释)它?或者以其他方式?

更重要的是,为了我的理解,有没有办法在数据读取器使用数据之前看到保存数据的传入缓冲区?

+1

也许,这是不是你在找什么,但你是否知道,使用[SQL事件探查器(http://msdn.microsoft.com/en-us/library/ms190378.aspx )你可以查看在sql server实例上发生的所有请求吗? – paqogomez

+0

是的。 :) Profiler很棒。这个问题是半好奇,半实用主义。我对从SQL服务器接收数据时缓冲区中客户端发生的事情感兴趣。从实际的笔记中,我试图弄清楚应用程序是否保持客户端(I/O)缓冲区相对空或者是否填满。如果SQL事件探查器可以提供特定于应用程序的客户端统计信息,它可能会工作,但如果存在,我不知道这种能力。如果它解决了我的问题,但我仍然想知道上述出于好奇。 –

回答

0

看来我的问题是消息灵通。

数据读取器一次读取一条记录,但它从 底层数据库驱动程序读取它。数据库驱动程序以块的形式从 数据库读取数据,通常使用8千字节的缓冲区。

如果你的结果记录很小并且你没有得到很多,它们将全部放入缓冲区,并且数据库驱动程序将能够将它们全部送到数据阅读器而不必询问数据库 了解更多数据。

如果取结果,该结果比缓冲区大,你只能 能够阅读它的第一部分,什么时候就在 网络缓冲区不存在数据,那么DataReader的将告知SQL Server的未来派 数据块。

How much data can be stored in network buffer when datareader is used

相关问题