我有一个调用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秒内运行。