2012-11-01 41 views
1

我实际上有一个存储过程,用于从我们的数据库存档事务数据并将它们传送到同一服务器中的DW数据库。性能差异:在SSMS中执行存储过程与使用.NET Windows应用程序调用存储过程

当我在SSMS中运行存储过程时,大约需要2-2.5分钟才能完成。但是,当我尝试使用Windows应用程序(其批处理作业)调用存储过程时,大约需要30分钟才能完成(相同的参数)。

我想知道这是否正常,因为我对时差感到惊讶。

谢谢!

+0

你在一个事务中运行它(我读过关于这个最好的文章)?两个查询处于相同的隔离级别吗?是使用任何存储计算的字段(包括xml列)的查询吗? (如果是这样,它很容易受到'SET'配置的影响) –

+0

存储过程正在使用事务... – Franco

+0

实际上它们是运行相同的存储过程...我只是在SSMS中运行它以确保存储过程运行正常...但是当我的应用程序调用存储过程时,它需要30分钟才能完成 – Franco

回答

0

这是因为你的sql server在其缓存中存储了2个执行计划。 当你查询SQL Server的时候是否这样做

  • 有什么执行计划在缓存中的当前设置?
  • 如果没有使用猜测最好的查询计划所提供的参数来创建一个

你ado.net客户端将设置为关闭,并SSMS与此设置为ON时设置ARITHABORT查询,以便SQL Server将有2执行计划。

如果你想在SSMS中相同的条件下,在你的代码,这样做 工具 - >选项 - >查询执行 - > SQL服务器 - >高级 - >取消选中SET ARTHABORT(此参数是无用的)。

来源:http://www.sommarskog.se/query-plan-mysteries.html

相关问题