【问题标题】:.NET to remote SQL Server slow on one machine, not the other.NET 到远程 SQL Server 在一台机器上慢,而不是另一台
【发布时间】:2011-12-13 18:21:50
【问题描述】:

我正在新设置的 Windows 7 桌面上开发 .NET 4.0 应用程序。在该应用程序中,对远程数据库的查询非常慢。相同的应用程序在我迄今为止使用过的笔记本电脑上运行得非常快。我现在使用的台式机比笔记本电脑快很多。我正在使用 VPN 连接连接到远程数据库服务器(与笔记本电脑上的相同)。它在 IIS 和 Cassini 中都很慢。

我应该补充一点,应用程序正在使用实体框架进行数据访问。

有人知道问题可能是什么吗?

更新 1: 好吧,这真的越来越奇怪了。我在笔记本电脑和台式机上查看了 SQL Server Profiler 中的查询。他们都是一样的。但是在我的桌面上,查询需要越来越长的时间来执行。因此,我在桌面上启动了 Management Studio,并执行了一个从 SQL Server Profiler 获取的查询。它跑得非常快(不到一秒)。但是当我再次执行它时,它花了 1 秒钟。然后是 2 秒,然后是 4 秒(看到模式了吗?)。我无法终生弄清楚是什么原因造成的。这是查询:

    select top (2) [Extent1].[RequestID] AS [RequestID], 
[Extent1].[RequestDate] AS [RequestDate], 
[Extent1].[RequestTitle] AS [RequestTitle], 
[Extent1].[RequestTypeID1] AS [RequestTypeID1], 
[Extent1].[RequestTypeID2] AS [RequestTypeID2], 
[Extent1].[SubjectMatterID1] AS [SubjectMatterID1], 
[Extent1].[SubjectMatterID2] AS [SubjectMatterID2], 
[Extent1].[ProviderID] AS [ProviderID], 
[Extent1].[Description] AS [Description], 
[Extent1].[Notes] AS [Notes], 
[Extent1].[RequestedBy] AS [RequestedBy], 
[Extent1].[OrganisationID] AS [OrganisationID], 
[Extent1].[ProgramID] AS [ProgramID], 
[Extent1].[StatusID] AS [StatusID], 
[Extent1].[MethodID] AS [MethodID], 
[Extent1].[StaffID] AS [StaffID], 
[Extent1].[TopicID] AS [TopicID], 
[Extent1].[RequestCreatedBy] AS [RequestCreatedBy], 
[Extent1].[RequestCreatedOn] AS [RequestCreatedOn], 
[Extent1].[RequestModifiedBy] AS [RequestModifiedBy], 
[Extent1].[RequestModifiedOn] AS [RequestModifiedOn], 
[Extent1].[RequestedByExtraID] AS [RequestedByExtraID]
FROM [dbo].[Request] AS [Extent1]

但是等等!越来越诡异了!无论我多久执行一次,以下查询总是花费相同的时间(不到一秒):

select top (2) * From request

我在这件事上浪费了很多时间。如果有人有任何指点,你会永远在我的酷人书中。

更新 2 如果我在 management studio 中“包含实际执行计划”,无论我多久执行一次,查询总是非常快。

【问题讨论】:

  • 似乎是网络/vpn 问题。 Ping 也很慢?
  • 不,40 毫秒。管理工作室也很快。
  • 你如何建立联系? ADO、Linq2SQL、EF、其他?标准查询,例如 select 或 SProcs?
  • 英孚。标准查询和 SP(通过函数导入)。
  • 嗯,我在我们的应用程序中遇到过类似的情况。请注意,ManagementStudio 结果可能会导致您得出错误的结论。

标签: .net sql ado.net dns vpn


【解决方案1】:

同样的事情发生在我身上,我花了几天时间试图弄清楚。从我的工作站从 Entity Framework 和 ADO.NET 到远程 SQL Server 的查询运行速度极慢,但在所有其他开发人员的工作站上运行速度很快。禁用大发送卸载 V2 (IPv4) 立即解决了问题。

【讨论】:

    【解决方案2】:

    最后,经过几天尝试各种不同的设置,甚至从头开始重新安装所有东西(包括 Windows),我以某种方式找出了问题所在。它是——我仍然无法相信——网卡设置。我禁用了“IPv4 Checksum Offload”、“Large Send Offload (IPv4)”、“TCP Checksum Offload (IPv4)”和“UDP Checksum Offload (IPv4)”。现在它又好又快...

    【讨论】:

    • 老鼠...我希望我可以尝试这些设置,但是我正在通过 VPN 从笔记本电脑运行,并且这台机器中的无线网卡没有这些设置。
    【解决方案3】:

    在数据库服务器上运行跟踪并查看实际运行的实际 SQL 语句。我感觉你的 EF 生成的 SQL 比你在管理工作室中生成的 SQL 不同。您可能需要对其进行优化。 VPN 连接也可能是问题的一部分。

    【讨论】:

    • 同样,同样的应用程序在笔记本电脑上运行速度要快得多,所以这不是管理工作室与应用程序的问题。
    【解决方案4】:

    嗯,我在我们的应用中遇到过类似的情况。请注意,ManagementStudio 结果可能会导致您得出错误的结论。连接上有一个参数 ARITHABORT,在 MS 中默认设置为 ON,但在您的应用中,默认情况下始终为 OFF。

    链接:

    SQL Server ARITHABORT

    https://stackoverflow.com/questions/2465887/why-would-set-arithabort-on-dramatically-speed-up-a-query

    【讨论】:

    • 对,但就像我说的:同样的应用程序在我的笔记本电脑上性能要好得多。
    猜你喜欢
    • 2015-06-29
    • 2023-03-29
    • 2015-11-08
    • 2016-09-28
    • 1970-01-01
    • 2019-02-15
    • 2017-11-10
    • 2015-07-23
    • 1970-01-01
    相关资源
    最近更新 更多