Mac*_*iej 11 .net sql-server sql-server-2005 sqldatareader
我在MSSMS中查询执行~2秒(返回25K行)
.NET(sqlReader)中使用的相同查询只需几分钟!
我也尝试过只执行读者
(评论while循环中的所有代码只是离开reader.Read()) - 仍然相同!
知道怎么了?
我不是DBA,也没有特权与Profiler一起玩 - 会问我的DBA,让大家都知道.
与此同时,我注意到在我正在谈论的SP中添加" WITH RECOMPILE "参数后,必不可少的性能提升
所以,从我的角度来看,执行计划似乎就是这样......你怎么看?
[编辑] 我所检查的是从QA和.NET执行以下查询
select @@options
Run Code Online (Sandbox Code Playgroud)
我的理解是它将为两个环境返回相同的值.(如果没有使用不同的ex.plans)我是对的吗?
[EDIT2] 我已经阅读(来自http://www.sqldev.net/misc/fn_setopts.htm)在QA 中ARITHABOIRT = ON(在.NET中它关闭)
enybody是否知道如何为每个.NET连接强制ARITHABOIRT = ON?
我将在SQL Server Profiler中设置一个跟踪,以查看从.NET代码连接时连接使用的SET选项设置,以及SSMS中使用的设置.通过SET选项设置,我的意思是
ARITHABORT
ANSI_NULLS
CONCAT_NULL_YIELDS_NULL
//etc
Run Code Online (Sandbox Code Playgroud)
查看MSDN以获取选项表
我之前看到的问题是选项不同(在这种情况下ARITHABORT
),性能差异很大.
我会检查实际检索需要多长时间。
例如:
Private Sub timeCheck()
'NOTE: Assuming you have a sqlconnection object named conn
'Create stopwatch
Dim sw As New System.Diagnostics.Stopwatch
'Setup query
Dim com As New SqlClient.SqlCommand("QUERY GOES HERE", conn)
sw.Start()
'Run query
Dim dr As SqlClient.SqlDataReader = com.ExecuteReader()
sw.Stop()
'Check the time
Dim sql_query_time As String = CStr((sw.ElapsedMilliseconds / 1000)) & " seconds"
End Sub
Run Code Online (Sandbox Code Playgroud)
这将使您能够了解阻碍是在检索中还是在读取器的执行中。
归档时间: |
|
查看次数: |
14557 次 |
最近记录: |