SELECT 从程序中超时,但从 SQL Server Management Studio 工作

本文关键字:Server SQL Management Studio 工作 但从 程序 中超 超时 SELECT | 更新日期: 2023-09-27 17:57:13

我在执行 SQL SELECT 时超时。

我因此连接到数据库:

using (SQLConnection conn = SQLConnection(@"Data Source=mydbServer;Initial Catalog=mydb;Integrated Security=true;Timeout=180");
{
    conn.Open();

并且成功连接。

在我设置的使用{}中:

string query = @"SELECT a.field, a.timestamp " +
               "FROM mydb.dbo.myTable1 a WITH(NOLOCK) " +
               "LEFT JOIN [myOtherdbServer].myOtherdb.dbo.MyTable2 b WITH(NOLOCK) " +
               "ON a.field = b.field " +
               "WHERE b.field is NULL " +
               "AND a.timestamp >= '2015-05-01 00:00:00.000' " +
               "AND a.timestamp < '2015-06-01 00:00.00.000'";

并因此执行命令:

using (SQLCommand queryCmd = new SQLCommand(query, conn)
{
    queryCmd.CommandTimeout = 300;
    using (SQLDataReader rdr = queryCmd.ExecuteReader())
    { 

SQLCommand 引发超时异常:"在操作完成之前经过的超时期限或服务器没有响应"。

如果我在运行程序的同一系统上使用 SQL Server Management Studio,并且作为运行程序的同一用户执行相同的 SELECT,它将在 1 秒内完成并返回数千行。

这种情况现在一直在发生。 几天前它正在工作。 我应该寻找什么? 我很困惑,因为相同的SELECT可以从SQL Server Management Studio工作。 SQL SMS 是否使用其他连接?

SELECT 从程序中超时,但从 SQL Server Management Studio 工作

"

如果我在运行程序的同一系统上使用 SQL Server Management Studio,并且作为运行程序的同一用户,并执行相同的 SELECT,它将在 1 秒内完成并返回数千行。

  1. SQL Server Management Studio 中的执行时间更好可能有多种原因。这一次,结果被缓存,也可能是时间戳列上缺少索引
  2. 此外,您的应用程序服务器是否与 sql 服务器位于同一服务器上?否则,这可能会增加延迟并导致超时。
  3. 链接服务器可能是一个问题,除了延迟考虑,我不确定 NOLOCK 语句是否足以确保您尝试在远程服务器上实现的目标。您很有可能需要在包含 NOLOCK 语句的远程服务器上创建一个视图。

这种情况现在一直在发生。几天前它正在工作。我应该寻找什么?我很困惑,因为相同的SELECT可以从SQL Server Management Studio工作。SQL SMS 是否使用其他连接?

通常,当某些东西在工作,现在它已经停止工作时,然后有些东西发生了变化。开始故障排除,直到找到它是什么,查找索引更改,代码体系结构修改,甚至Windows更新,任何可能给您带来线索的东西,直到您能够还原它。

附加建议,尝试将 select 语句限制为 TOP 10,只是为了看到您能够返回结果,这可能表明问题出在对象的大小/查询执行时间上,而不是您的服务器/应用程序配置。