EF Core 3.1.14 重复冷启动

2023-12-08

我们已将一个非常简单的 .NET CORE 3 Web API 应用程序部署到 Azure 云。该应用程序是一个 Web API,并与 Azure 中托管的一个非常简单的 SQL 服务器数据库进行通信。我们注意到两个主要的性能问题

所有 API 调用都会进入数据库进行读或写操作。这些表仅包含 4 行和 5 行,查询只是基本的选择和插入查询,没有连接。

  1. 对 API 的第一次调用非常慢(在大小为 10 的表中查询 1 条记录需要 30 秒),我们添加了计时器,并注意到数据库调用占用了 99.99% 的时间。因此,我使用了 Azure Data Studio Profiler,并意识到查询在大约 29.90 秒后到达了 SQL Server。所以问题不在于查询本身。此外,第二个、第三个查询等速度非常快,并且在

  2. The 更大的问题也就是说,如果您停止调用 API 2-3 分钟,然后再进行一次调用,那么第一个查询将再次花费 30 秒。但后续查询速度更快。

如果这仅在 w3wp.exe 启动时发生,那么我不会担心,但如果对 API 的请求停止 2-3 分钟,那么它会再次关闭。这是值得关注的。

我们将“始终开启”设置为“是”。

我尝试在 Azure 中收集 Web 应用程序的 .NET Trace,但这给了我这个奇怪的错误。

enter image description here

以下是VS解决方案中安装的与EF相关的Nuget包版本。

enter image description here

这是 SQL Server 定价层。

enter image description here

还有其他方法可以收集 Azure Web APP 的跟踪吗?我确实需要查看这 30 秒的代码调用堆栈才能继续。我可以访问 KUDU 等。

Thanks.

更新 3 - 2021 年 5 月 8 日

我已经发布了我自己问题的答案。对于其他面临类似问题的人来说,这可能不是根本原因,但至少有 1 个方面需要调查。

更新 2 - 2021 年 5 月 7 日

按照 Ivan 的建议添加 EF Core 日志记录后,他认为打开连接花费的时间太长是对的吗?这是为什么?以及如何阻止这种情况发生?

更新 1 - 2021 年 5 月 7 日

杰森·潘- 我们正在使用应用程序服务计划,这是那里托管的唯一应用程序。计划是P1V2(https://azure.microsoft.com/en-us/pricing/details/app-service/windows/).

伊万·斯托耶夫- 是的,由于 .NET Trace 由于某种原因无法正常工作,正如我的问题中所解释的,我们捕获了 App Insights Profiler Trace 以捕获调用堆栈,并且根据调用堆栈,似乎与 SQL Server 的连接在 30 秒后打开。所以我对我的代码做了两处更改:

A。从我们的 Repository 类中删除了 IDisposable,该类通过 DI 进行上下文注入。在使用 Dispose 方法之前,我在上下文类上调用 Dispose。

b.我用 services.AddDbContextPool 替换了 services.AddDbContext

然后我编写了一个测试程序,每 2 到 4 分钟随机调用一次 API 方法,持续 1 小时,只有 1 次调用花费了 30 秒,其余 21 次调用花费了几毫秒。

但我的下一步是运行 24 小时测试(例如,每 2-7 分钟调用 1 次),看看这只是侥幸还是实际上是解决方案。

enter image description here


好的,所以发布我的问题的答案。事实证明,Web应用程序、应用程序服务计划、sql服务器或实体框架都没有问题。我对我的应用程序和其他 1 个没有任何问题的应用程序进行了网络跟踪,并使用网络监视器将其打开。我们注意到他们正在走不同的道路。查看 IP 地址后,我们意识到另一个应用程序具有虚拟网络设置。您可以通过转到您的应用程序服务计划,然后单击左侧菜单栏中的“网络”选项来查看这一点。然后选择第一个用于 vNet。配置 vNet 后,所有响应都会在 1 秒内完成。

我还有一个疏忽。 Auth0 调用有时也需要 14 秒。当我尝试跑步时tcpping google.com来自 KUDU 的有时也会超时。但对于其他网络应用程序来说工作得很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF Core 3.1.14 重复冷启动 的相关文章

  • 如何识别 SQL Azure 中的死锁?

    我有一个由两个实例组成的 Windows Azure 角色 有时交易会失败并显示SqlException与以下文字 事务 进程 ID N 在锁资源上与另一个进程发生死锁 并被选为死锁牺牲品 重新运行事务 现在我已经谷歌搜索了一段时间并阅读这
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • Azure 发布包不包含所有文件

    我有几个配置 dll 和一个 exe 文件位于 bin 文件夹中并包含在项目中 文件设置为 内容 和 始终复制 当我在本地调试项目时 一切正常 问题是当我发布云服务时 文件丢失了 Azure 发布过程忽略了这些文件 并且部署包文件中也缺少这
  • 优化 CSS 交付 - Google 的建议

    谷歌建议在 head 中使用非常重要的 CSS 内联 并在内部使用其他 CSS
  • 为什么 System.nanoTime() 比 System.currentTimeMillis() 慢(性能)?

    今天我做了一个快速基准测试来测试速度性能System nanoTime and System currentTimeMillis long startTime System nanoTime for int i 0 i lt 1000000
  • 大数组上的 SSE 性能较慢

    我是 SSE 编程新手 所以我希望有人可以帮助我 我最近使用 GCC SSE 内在函数实现了一个函数来计算 32 位整数数组的总和 下面给出了我的实现代码 int ssum const int d unsigned int len stat
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 为什么 EF Core 一对多关系集合返回 null?

    这可能看起来像一个重复的问题EF Core 一对多关系列表返回 null https stackoverflow com questions 55210832 ef core one to many relationship list re
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • Entity Framework Core 中的两个外键

    我在使用 Entity Framework Core 创建数据库时使用代码优先方法 我想创建两个指向同一个表的外键 我的示例显示用户表将保存用户 ID 消息表将保存接收者 ID 和发送者 ID 这意味着两个值必须指向同一个表 用户代码 pu
  • DbContext 实例不能在 OnConfiguring 内部使用,因为此时它仍在配置中

    我正在尝试构建一个自定义视图位置系统 public class myViewLocationExpander IViewLocationExpander private myDBContext context public myViewLo
  • linq2sql,存储库模式 - 如何从两个或多个表查询数据?

    我使用存储库模式 和 linq2sql 作为数据访问 并拥有例如 ProductsRep 和 CustomersRep 在非常简单的场景中 数据库有两个表 产品 产品 ID 客户 ID 产品名称 日期 和顾客 客户 ID 名字 姓氏 每个存
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 直接向订阅发送消息

    是否可以将消息直接发送到订阅队列 设想 消息失败 被丢弃到死信中 该消息已使用 defer 手动拾取 克隆 并且需要发送到它首先被发送到死信的队列 但不是主题 我可以直接向订阅者发送消息吗 我考虑过为每个订阅者创建一个单独的重试队列 处理服
  • 如何最大限度地提高服务器性能?

    我一直在努力了解性能和可扩展性 并想知道开发人员 系统管理员正在做什么来提高他们的系统的效率 为了标准化答案 如果您能尽力回答以下任一问题 将会有所帮助 Profile Magazine publication on Joomla Jobs
  • Azure 服务总线主题请求与消息

    I need help interpreting these graphs 它有 0 订阅 这是否意味着该主题没有任何内容 查看消息图表 在过去 30 天内 没有收到或读取来自此主题的消息 如果没有向该主题写入 读取任何内容 为什么会有 3
  • 将 SQL 存储过程 ResultSet 表 JSON 转换为 XML

    这看起来很明显 但不知何故它对我不起作用 我正在尝试在 Microsoft Azure 上的逻辑应用程序中构建解决方案 但我无法将 JSON 对象转换为 XML 我的要求是执行存储过程并以 XML 格式保存响应 默认情况下 SQL 执行存储
  • Azure 管理 API 返回 500 内部服务器错误

    我通过此请求从 Azure REST 管理 API 返回 500 内部服务器错误 为什么 X509Certificate cert X509Certificate2 CreateFromCertFile cert path string u

随机推荐

  • 自定义任务运行程序方法抛出 ArgumentException

    由于 CultureInfo 没有从一个线程复制到另一个线程 所以我制定了以下方法来为我做这件事 public static StartCustomTask Action action TaskCreationOptions tco Tas
  • 使用 Exchange 服务和 OAuth 订阅推送通知时出现 401 未经授权

    我正在尝试使用 oauth 访问 EWS 托管 API 订阅推送通知 如下所示 var authenticationTask await authenticationContext AcquireTokenAsync https outlo
  • 测试套件运行失败 TypeError: Cannot set property 'content' of null 在 Jest 中运行

    我正在基于 Vue 的项目编写测试 并且我是 Framwork Jest 和 Vue 测试 Utils 的新手 我还没有找到类似问题的解决方案 我尝试过几个组件 但错误总是类似 示例 test js import shallowMount
  • 如何拒绝/关闭特定来电号码

    在我的应用程序中 我想阻止特定的传入号码 我进行谷歌搜索 然后执行以下操作阻止来电 Android 但这段代码对我不起作用 我正在测试安卓2 3 5 我这里没有活动课 gt gt 第一类是扩展BroadcastReceiver 清单文件
  • 如何知道应用程序在android中运行了多长时间?

    我正在android中做一个应用程序 它需要知道应用程序运行了多长时间 有谁知道如何检索此类信息 android 有什么方法可以提供有关正在运行的应用程序的信息 从它们运行的 时间来看 我不知道有什么方法可以处理这个问题 但你可以简单地自己
  • 如何强制 xslt 转换将数据加载到 cdata 部分?

    我有一个客户要求我提供给他们的 xml 中的所有文本都位于 CDATA 部分中 我知道文本不需要在 CDATA 中 因为它在提供给客户端时已经被解析和转换 然而 无论我多么确定 他们仍然需要 CDATA 部分 叹 我正在使用 Saxon 9
  • 如何检测 facebook 的 FB.init 何时完成

    旧的 JS SDK 有一个名为 FB ensureInit 的函数 新的SDK似乎没有这样的功能 我如何确保在完全启动之前我不会进行api调用 我把它放在每页的顶部 div div
  • 将 Objective-C typedef 转换为其等效字符串

    假设我在 h 文件中声明了一个 typedef 如下所示 typedef enum JSON XML Atom RSS FormatType 我想构建一个将 typedef 的数值转换为字符串的函数 例如 如果消息 self toStrin
  • Android - 如何获取应用程序名称? (不是包名)

    在我的清单中我有
  • 使用 System.AccessToken 创建服务端点

    目前 我们使用特定的用户名和 PAT 来进行 Azure DevOps REST API 调用 但从维护和脆弱性的角度来看 这不是一个好的解决方案 我们想改用 OAuth 令牌 我们遇到问题的一种情况是尝试从管道生成服务端点 我可以使用以下
  • 使用c#获取系统信息[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何获取计算机的系统信息 系统制造商 系统型号 Bios版本 您可以使用以下方式获取制造商名称 添加引用System Management System Management S
  • java dom getTextContent() 问题

    当我尝试访问我的 xml 数据时doGet我的 servlet 的方法 它只输出直到空白的值 包括整个值 XML 文件
  • 在 AWS iOS SDK 中,如何处理 FORCE_CHANGE_PASSWORD 用户状态

    我已经按照这里的示例进行了操作 https github com awslabs aws sdk ios samples tree master CognitoYourUserPools Sample 将交互式认知登录集成到我的 iOS 应
  • 如何识别图片中的钞票?

    我有一些欧元钞票的图片 账单完全在图像内 并且大多是平坦的 例如变形很小 并且透视倾斜很小 例如完全从钞票上方拍摄的图像 现在我不是图像识别方面的专家 我想实现以下目标 找到钞票的边界框 这样我就可以从图像其余部分的噪声中 剪掉 钞票 弄清
  • Java Graphics2D浮点精确drawOval替代品?

    因此 我尝试绘制一个圆弧并在其圆形端点周围放置一个圆 但由于舍入到最近的像素 我遇到了问题 这在某些情况下是可见的 但并非在所有情况下都是可见的 有没有办法使用浮点和抗锯齿来绘制圆来消除这种舍入误差 您可以运行此代码来查看问题 为了清晰起见
  • max深度和min深度如何与find命令一起使用?

    我想知道最大深度和最小深度如何与 find 命令一起使用 还想知道下面的命令是如何工作的 find mindepth 2 maxdepth 5 name file1 根据find 的手册页 maxdepth levels Descend a
  • 比较 Timer 与 DispatcherTimer

    有什么区别between System Windows Forms Timer and System Windows Threading DispatcherTimer 在什么情况下我们应该使用它们 有什么最佳实践吗 Windows For
  • 使用 h5py 打乱 HDF5 数据集

    我有一个很大的 HDF5 文件 30GB 我需要对每个数据集中的条目 沿着 0 轴 进行洗牌 浏览 h5py 文档我也找不到randomAccess or shuffle功能 但我希望我错过了一些东西 有谁足够熟悉 HDF5 来想出一种快速
  • 请求权限对话框暂停我的活动

    我在里面请求许可onActivityResult我的活动的情况 发生的情况是我的活动在显示请求权限对话框时被暂停 这是为什么 我能以某种方式阻止它吗 我所做的只是以正常方式请求许可 if Build VERSION SDK INT gt B
  • EF Core 3.1.14 重复冷启动

    我们已将一个非常简单的 NET CORE 3 Web API 应用程序部署到 Azure 云 该应用程序是一个 Web API 并与 Azure 中托管的一个非常简单的 SQL 服务器数据库进行通信 我们注意到两个主要的性能问题 所有 AP