我正在使用EF 4,而且我对另一个怪癖感到难过......基本上,我有一个相当简单的存储过程,它负责从SQL检索数据并返回复杂类型。我通过函数导入将存储过程添加到我的模型中。它或多或少在以下结构中。
using (ModelContainer context = GetNewModelContainer())
{
return context.GetSummary(id, startDate, endDate, type).ToList();
}
我应该提一下上面的代码是通过远程SQL连接执行的。执行需要将近10分钟。但是,通过远程连接使用SQL Server Management Studio,存储过程几乎立即执行。
只返回100条记录,每条记录大约有30个字段。
当我在本地运行上面的代码(没有远程连接)对照客户数据库的备份时,它会毫不拖延地执行。
我对可能造成这种性能损失的原因感到困惑。 10分钟是不可接受的。我不认为这是存储过程。由于远程连接,它可能是序列化吗?关于如何跟踪和纠正罪魁祸首的任何想法?
答案 0 :(得分:3)
您描述的症状通常与错误缓存的查询计划相关(由于参数嗅探)。
确保您的统计信息是最新的,并在索引碎片时重建索引。
规范性引用是: Slow in the Application, Fast in SSMS? 绝对必要的读物。
可能有用的SO链接: