【问题标题】:EF6/Glimpse - Connection takes much time when compared to the command executionEF6/Glimpse - 与命令执行相比,连接需要很多时间
【发布时间】:2016-04-25 07:59:56
【问题描述】:

我们正在努力优化我们网站的性能。我们正在使用 glimpse 进行分析和调试。我们注意到,与命令执行时间相比,glimpse 时间线中的“连接打开”时间要长得多。

数据库服务器中的负载和连接数似乎正常。所以我们无法确定根本原因。

根据 Glimpse Timeline,连接打开了 381 毫秒。但是命令在 6 毫秒内执行。

总查询执行时间 - 430 毫秒

总连接打开时间 - 19130 毫秒

知道为什么会这样吗?

注意

DB Context的范围就是Http请求的范围

这些查询返回的记录数

【问题讨论】:

  • 后续查询是否更快?如果是这样,可能是视图生成发生了。 msdn.microsoft.com/library/cc853327(v=vs.100).aspx
  • @AlexanderDerck 命令只是选择语句,它从应用程序相关表中获取数据。 where条件中使用的几乎所有列都是主键或整数值(索引)查询性能良好。
  • @SteveGreene 几乎所有查询都重复相同的模式(实际上对于少数查询来说更糟)作为此 http 请求的一部分,大约执行了 50 个查询。

标签: sql-server asp.net-mvc entity-framework entity-framework-6 glimpse


【解决方案1】:

.Net 使用连接池并且不关闭连接。唯一重要的是 EF 方法返回给调用者需要多长时间。您是否在“使用”块中有 DBContext 实例让 .Net 知道要释放它?

【讨论】:

  • 我们正在使用共享数据库上下文 - 跨应用程序的单个数据库上下文。 DBContext 将在 http 请求到达控制器时创建,并在控制器 Action 执行时释放(在 http 请求结束时)
  • 为什么要使用共享数据库上下文?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多