DataAdapter.Fill性能异常

时间:2016-05-16 06:45:07

标签: c# sql-server ado.net

我有两个DataBasesDB1& DB2:两个数据库都相同,DB2是从DB1的备份创建的。当我在SP1上运行存储过程DBs时,在select上为我提供输出(DBs语句)大约需要2秒钟。

现在的问题是当我从DBs指出这些service并尝试使用DataAdapter.Fill方法时,它给了我不同的时间( 54 - 63秒DB1上的DB2 42 - 44秒 DBs上的DBs一致。注意到我使用相同的服务指向servers因此它不能成为服务行为/性能。现在我的问题是:

这可能是什么原因?欢迎任何建议 我应该了解什么

  

帮助信息:

     
      
  1. 两个数据库都处于不同的SP(相同的配置),但由于在SQL Server Management Studio执行DBs需要同一时间   在DB上,我排除了server servers表现的可能性。   网络延迟可能是一个因素,但两者SQLDependency都不太可能   在相同的网络上,实际上在相同的物理位置。这是我的   最后一个检查选项。

  2.   
  3. 其他一些服务正在使用DB1 ON DataAdapter(s)。哪个一直填充DataAdapter,这可能是我的理由   fill DataSet减慢速度的方法? (我猜不太可能)

  4.   

根据以下评论中的要求,代码填充n

DataSet Fill

  

PS:上述时间是上图中突出显示的代码行的执行时间。

3 个答案:

答案 0 :(得分:1)

这听起来非常像查询计划问题。

Erland Sommerskog撰写了一篇关于此类问题的优秀文章, Slow in the Application, Fast in SSMS?

我的第一个猜测是“The Default Settings”,但它也可能是其他问题之一。

答案 1 :(得分:0)

您是否尝试过不使用SQL.StoredProcedure并将其作为一行SQL运行: " exec dbname.dbo.storedprocname params"。

它的工作要多一点,因为你必须循环参数以在最后添加到字符串但它是一个SQL字符串,它并不关心你在做什么,它没有做任何事情幕后有趣。应该有类似的时间,如果失败,请尝试检查存储过程正在使用的db表等索引等。

答案 2 :(得分:0)

第一步 - 重建或重组索引。这通常是SQL Server最常见的性能问题,并且易于修复。有时重启SQL Server这也很重要