我正在研究aspnet方法(.NET 4.8,而不是核心)中偶尔出现的一些缓慢现象。其症状是,大多数情况下,API会在几十毫秒内做出响应,但有时需要几秒钟才能做出响应。
使用MiniProfiler,似乎大部分时间都用于执行SQL查询。然而,API执行几个查询,而且并不总是相同的,需要很长时间。这里是一个简短的屏幕截图的一个迷你剖析器跟踪为这样的要求。

看到这一点,我假设数据库执行某些查询的速度有时很慢,可能是在等待锁,但我能够捕获与使用扩展事件在概要文件上看到的相同的查询,并且显示查询实际执行得非常快(“持续时间”列以微秒为单位):

我知道这是同一个查询,因为参数是相同的,时间戳是一致的。无论如何,扩展事件捕获的所有查询都是快速的。
由此,我得出结论,原因不是Server。我想,WebApi端可能有一些资源耗尽,所以我检查了与线程池、sql连接池和垃圾收集相关的性能计数器,但是当这些缓慢的响应时间发生时,无法观察到任何相关的情况。
我的想法快用完了。当然,这个问题只发生在生产中,我无法在本地或在我们的测试环境中复制它。
如何识别这些延迟的原因?
发布于 2022-04-13 21:54:01
我认为您没有根据RPC已完成事件诊断Server是否慢所需的所有信息。该持续时间并不反映整个RPC过程的持续时间,只反映结束事件所用的时间。还有一个称为RPC启动的事件,您需要监视它,然后自己计算这两个事件之间的持续时间。
发布于 2022-04-14 17:20:58
具有相同参数的
相同查询有时慢,有时快
。
https://stackoverflow.com/questions/71207077
复制相似问题