Entity Framework 处理查询结果的性能不一致

Entity Framework and inconsistent performance with processing the results of a query

只需在我们的网站上设置 New Relic,我们就会注意到我们的一个网络 api 调用中出现了一些奇怪的峰值。

在这一点上,我将问题归结为单个 EF 查询,我将其移出到它自己的方法中,以便我可以使用 New Relic 对其进行检测..

该方法唯一做的是

//I changed this from ToListAsync to ToList to see if it would help
var result = Context.Data.Where(x=> x.id = id).ToList();
return result;

就是这样..

使用 New Relic 并注销所有 SQL 查询 我相当肯定问题不在于查询速度慢。 New Relic 说该方法平均只花费 339 毫秒 运行 来对抗数据库,我从来自 EF 的跟踪数据中看到类似的数字。但是这些方法的平均执行时间是 16 秒。

通常此方法的执行时间不到 2 秒,但 EF 有时似乎会进入 lala land,无论它在做什么,它都需要 60 或 70 秒才能完成。但我从未见过数据库查询本身花费超过 500 毫秒的时间。查询每次运行时都会检索几乎完全相同的数据集..

我在日志中注意到,在执行查询和关闭连接之间总是有很长的等待时间。这是日志的示例输出

注意完成时间是 6 毫秒,但在关闭连接之前有 11 秒的延迟

这不可能来自负载,因为现在确实有 2 个用户正在测试 Azure 站点...所以负载几乎不存在。

我已经尝试在本地重新创建它,但无法...而且我真的不确定从这里开始调试问题除了慢慢地破坏 EF 部分以获得像 Dapper 这样更简单的东西之外看看它的行为是否更一致。

技术栈:

您使用的 Sql Azure 是哪个版本?

我们在 Sql Azure Web(即将停用的那个)

中遇到了类似的问题

我们有一个查询使用 Entity Framework 6,agsint a table 大约有 700,000 行。在我的本地 sql 服务器上它花了一秒钟 - 在 Sql Azure 上它花了超过 1 分钟!,更糟糕的是有时它甚至超时

我的猜测是 Sql azure web 是一个共享 sql 服务器并且资源有限。