1

我实际上有一个存储过程,我用它来归档数据库中的事务数据并将它们传输到同一服务器中的 DW 数据库。

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

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

谢谢!

4

1 回答 1

0

这是因为您的 sql server 在其缓存中存储了 2 个执行计划。当您查询某些内容时,SQL Server 会执行此操作

  • 当前设置的缓存中是否有任何执行计划?
  • 如果没有创建一个使用提供的参数来猜测最佳查询计划

您的 ado.net 客户端将查询设置 ARITHABORT 设置为 Off,SSMS 设置为 On,因此 SQL Server 将有 2 个执行计划。

如果您想在 SSMS 和您的代码中处于相同的状态,请执行此工具 -> 选项 -> 查询执行 -> SQL Server -> 高级 -> 取消选中 SET ARTHABORT(此参数无用)。

来源: http: //www.sommarskog.se/query-plan-mysteries.html(我读过的最好的文章)

于 2013-02-08T15:11:24.717 回答