【问题标题】:Why is a call to DatabaseInstance.ExecuteSprocAccessor<T>(...) taking so long for such a simple query?为什么这么简单的查询调用 DatabaseInstance.ExecuteSprocAccessor<T>(...) 需要这么长时间?
【发布时间】:2012-10-21 02:12:34
【问题描述】:

调用数据访问应用程序块时速度非常奇怪。

它调用的 SP(“QuestionsToBeAnswered”)在不到直接在服务器上执行时为 1 秒。我的 SQL 体验非常好,我确信 SQL 服务器上不存在问题。

但是,当它通过 DAAB 调用时,需要很长时间才能返回对象集合。 ExecuteSprocAccessor(...) 通常返回一个 IEnumerable,并且 SP 直到集合被枚举或以其他方式被消费后才被执行,所以这个问题直到消费发生时才会出现。

DatabaseInstance.ExecuteSprocAccessor<T>(storedProcedure, rowMapper, args);

鉴于相同的代码返回 >200 行相当复杂的信息没有问题,我很困惑为什么这段代码需要这么长时间(55 秒!)来执行。

欢迎任何想法......

【问题讨论】:

  • 尝试重新编译存储过程执行计划。
  • @Jack 我已经重新设计了 SP 作为这个问题的一部分(这大大减少了执行时间到
  • 我只是想确认一下:这个查询在 ssms 中总是很快,但在 daab 中总是很慢。对吗?

标签: c# performance sql-server-2008-r2 daab data-access-app-block


【解决方案1】:

您可以尝试运行 SQL Profiler 以查看使用 DAAB 运行时实际调用的样子。有了它,看看它正在使用的执行计划。

过去,我编写了一些代码,作为 SQL 查询运行良好,但作为存储过程却非常慢。结果是查询优化器对一些重复索引使用了不同的 SQL Query 执行计划,然后是存储过程。在对索引进行排序后,两者都以相同的速度运行。

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2015-08-11
    • 2022-11-10
    相关资源
    最近更新 更多