.net-core - DbContext.BeginTransactionAsync 有时需要几秒钟才能完成
问题描述
使用 EF Core 3.1,我们在调用BeginTransactionAsync()
.
上面的例子显示了刚刚超过 1 秒,但我看到的数字高达 15 秒。
我们的数据库是高级层中的 Azure Elasic 池。整个池的最大 CPU 使用率不超过 60%,eDTU 使用率也不超过,因此显然这不是 CPU 问题。这可能是什么原因造成的?
它似乎没有在任何特定时间间隔内发生,并且该问题出现在弹性池中的所有数据库中。(这是一个多租户应用程序,每个租户都有一个数据库)。当在 05:55:18.745 所见的同一时刻(或非常接近)创建多个事务时,似乎会发生此问题,但在其他时间它工作得很好,如 05:55:15.704 所见
是否BeginTransactionAsync()
会导致数据库中的任何形式的锁定?
我们的应用使用 linux 容器在 Azure 应用服务中运行。该数据库与我们的容器位于同一天蓝色区域。
解决方案
因为调用了线程池,所以似乎有一些滞后,但它比 .NET Framework 实现快大约 3 倍。
原始答案的结果使用最新版本的 EF (6.4.0) 和 .NET Framework (4.7.2)。
当表中存在 binary(max) 列并对其执行异步调用时。Ado.Net 方面存在生成太多任务的问题,这会减慢进程。EF 的问题在于它没有正确使用 Ado.Net。
为什么不一起使用 EntityFramework 和 .NET Transactions?
可以使用事务以原子方式执行多个数据库操作。如果事务提交,则所有操作都成功应用于数据库。如果事务回滚,则不会对数据库应用任何操作。
这是来自 GitHub的原始帖子,很有帮助:使用多个联接时由于 3.0 中的更改而导致的显着查询速度下降
推荐阅读
- reactjs - 反应和对象 - 类型错误:无法读取未定义的属性“地图”
- c# - Azure 函数 QueueTrigger 和 int 消息
- java - Java versions don't match between command prompt and STS
- java - Opentelemetry java Automatic Instrumentation with zipkin exporter 选项正在使用 OtlpGrpcSpanExporter
- r - 在两个变量的比例之间创建一个图
- python - 在 python 中安装 arpreq 时如何修复错误?
- php - 连接到 XDebug 3 时 Netbeans 12.2 挂起
- rust - 有没有办法查看我的项目中可选依赖另一个 crate 的所有 crate?
- javascript - 即使您无权访问 Google 站点,如何继续运行脚本?
- flutter - 无法在 IOS 上运行应用程序,有关 Flutter 中 pod 的问题