当应用进行短的多个数据库调用时,异步和等待是否有助于提高吞吐量?



我正在处理的应用程序使用多个短期数据库调用来读取和更新数据。一个调用的输出正由另一个调用使用。

在这种情况下,对每个数据库调用使用 await 是否会导致吞吐量增加?

应用程序和数据库是单独托管的。

构建的概念验证实际上降低了吞吐量,我推测这是因为上下文切换的开销。

同步版本提供大约 8 个频率/秒,而异步版本仅提供 2.5 个频率/秒。

我已经确保 httpTargetRuntime 设置为 4.5.2,使用 aync 并一直等待到 asmx 服务,该服务使用 APM 样式端点,如记录 https://learn.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/interop-with-other-asynchronous-patterns-and-types#ApmToTap

我正在使用 ADO.NET 异步版本方法,并在连接字符串中设置了异步处理 = True。

  1. 异步等待是否应该被认为非常适合短 oltp 事务?
  2. 如果上述情况是由于死锁,如何进行故障排除。我们已经对代码进行了审查,除了上面链接中提到的那个之外,没有观察到任何直接从任务中使用.Result的地方。

否,因为您没有并行访问它们。Async 和 Await 只是将上下文返回给调用方,从而使主线程不必等待。但是需要完成相同数量的工作量,无论有没有 Async Await,并且等待每次调用将结果传递给下一个调用(加上上下文切换(。

我建议重写逻辑,以便能够仅调用对数据库的一个请求,例如,如有必要,请创建一个存储过程。

最新更新