我有两个DataBases
(DB1
& DB2
:两个数据库都相同,DB2
是从DB1
的备份创建的。当我在SP1
上运行存储过程DBs
时,在select
上为我提供输出(DBs
语句)大约需要2秒钟。
现在的问题是当我从DBs
指出这些service
并尝试使用DataAdapter.Fill
方法时,它给了我不同的时间( 54 - 63秒DB1上的DB2
和 42 - 44秒 DBs
上的DBs
一致。注意到我使用相同的服务指向servers
因此它不能成为服务行为/性能。现在我的问题是:
这可能是什么原因?欢迎任何建议 我应该了解什么 ?
帮助信息:
两个数据库都处于不同的
SP
(相同的配置),但由于在SQL Server Management Studio
执行DBs
需要同一时间 在DB
上,我排除了server
servers
表现的可能性。 网络延迟可能是一个因素,但两者SQLDependency
都不太可能 在相同的网络上,实际上在相同的物理位置。这是我的 最后一个检查选项。- 醇>
其他一些服务正在使用
DB1
ONDataAdapter(s)
。哪个一直填充DataAdapter
,这可能是我的理由fill
DataSet
减慢速度的方法? (我猜不太可能)
根据以下评论中的要求,代码填充n
:
PS:上述时间是上图中突出显示的代码行的执行时间。
答案 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这也很重要