【问题标题】:SQL SSMS VS .Net Perfomance QuerySQL SSMS VS .Net 性能查询
【发布时间】:2018-06-05 05:08:04
【问题描述】:

我已经在我的电脑上安装了 Sql Server Management Studio。

然后我远程连接到我的一个数据库

我执行的查询在 1 或 2 秒内返回 6000 条记录 但是当我从 .Net 应用程序(WPF 桌面)也从同一台 PC 运行相同的查询时,数据传输几乎需要 8-9 秒

我在 .Net 中的代码非常简单明了

这是代码

 Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    Dim Sql_Connection As New SqlClient.SqlConnection("MyRemoteSQLConnectionString")
    Dim Sql_Command As New SqlClient.SqlCommand("select Col1,Col2,Col3,Col4,Col5,Col6 from Table", Sql_Connection)
    Sql_Connection.Open()
    dr = Sql_Command.ExecuteReader

    Dim DataTable As New DataTable
    DataTable.Load(dr)
    'The above code takes 8-9 seconds to finished but in ssmo takes only 1-2 seconds for 6000 Records
    Sql_Connection.Close()

End Sub

为什么会这样?剂量 ssms 有不同的方式来管理传输的数据?

【问题讨论】:

  • 没有区别。您将查询发送到服务器的方式不会影响它在服务器上的执行方式。如果您发现差异,那是您的代码。顺便说一句,它不会像您认为的那样做。该查询在您调用ExecuteReader 时执行。 Load 在本地运行并将结果加载到数据表中。您没有发布 SSMO 代码,但我猜它不会加载任何结果
  • BTW 6000 条记录很少需要 2 秒,而且太多而无法显示给人类。事实上,用户可能不会阅读所有记录,只阅读前几页。一次加载所有 6K 记录会浪费时间而没有太多好处。如果您打算在网格上显示它们,请使用分页和/或虚拟滚动来仅加载您要显示的内容
  • 尝试运行分析器以查看执行了哪些实际查询。您可能会看到可以解释原因的差异。
  • 我的意思是,如果 ssms 需要 2 秒才能通过网络将近 3mb 数据从远程数据库传输到我的本地 PC,并在 2 秒内给我 ssms 的结果,为什么 DT.Load 需要8 秒填充数据?剂量 ssms 处理通过网络传输数据的不同方式?或处理如何在结果面板中显示数据的不同方式?因为 ssms 和 .net 都针对相同的 connectionString 执行相同的查询,并试图确定为什么 .net 需要 8 秒而 ssms 需要 2 秒才能显示结果。
  • @user2160275,SSMS 也使用 ADO.NET。查询计划可能不同。我建议你仔细阅读sommarskog.se/query-plan-mysteries.html

标签: .net sql-server performance management-studio-express


【解决方案1】:

好的, 似乎我在这篇文章中找到了答案

Same query with the same query plan takes ~10x longer when executed from ADO.NET vs. SMSS

ado.net ConnectionString 中的MultipleActiveResultsSet 选项应为FALSE

和@DanGuzman 感谢您清除此问题。 “SSMS 也使用 ADO.NET。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多