sys.dm_exec_procedure_stats. SqlCommand.ExecuteReader()存储过程执



我有一个调用Azure SQL存储过程的应用程序"report.GetReportCell"要调用这个过程,我的应用程序使用SqlCommand.ExecuteReader()方法。

有时呼叫太慢。在Dependency遥测中,我看到很多记录使用:

  • 数据字段中我的进程名("report.GetReportCell")
  • 长(比;/ul>我怀疑存储过程太慢了,但是我不能确认:

    • sys.dm_exec_procedure_stats。max_elapsed_time很短(小于8秒)
    • 系统。query_store_runtime_stats不包含任何相关的长期查询
    • 当我在SSMS中调用这个进程时,它工作得很快

    当使用SqlCommand.ExecuteReader()方法调用存储过程时,可能导致速度减慢的原因是什么?

    乌利希期刊指南2022-07-21

    我读过一篇关于"参数嗅探问题"的优秀文章。以及其他可能导致执行缓慢的原因- https://www.sommarskog.se/query-plan-mysteries.html

    但我认为经济放缓的原因是别的。因为:

    • 查询存储不包含任何相关的慢速查询
    • sys.dm_exec_procedure_stats。Max_elapsed_time用于报告。GetReportCell很小

我有完全相同的问题,@DeepDave-MT有答案。该过程在应用程序中耗时30秒,但在SSMS中耗时0秒。当我在SSMS中使用SET ARITHABORT OFF运行它时,我发现它运行了22秒。将SET ARITHABORT ON直接添加到存储过程中使我的应用程序在1秒内运行。

最新更新