执行时间:为什么相同代码和相同参数的持续时间会有很大差异



这里的代码非常简单。

CREATE PROCEDURE [dbo].[PGetAccountRecentlyAmountAndCount_DEBUG]
AS
DECLARE @a DECIMAL (19,4) = 0
SELECT @a = ISNULL(SUM(FValidBet * 150 / 100), 0) FROM [dbo].[TOrder_Bak10](NOLOCK) A

我监控过所有的处决,他们都有相同的计划处理方式。

然后,在执行sp之前,我已经清理了计划缓存和缓冲区缓存:

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

仍然没有什么变化。

我敢肯定,它们都是用同一个计划执行的,同时不存在缓存。所以我不明白还有什么原因。

这个表在另一个sp上没有更新、插入或选择。只在这里。

希望有人能给我指引方向。

在此处输入图像描述

我建议它看起来像一个通常以50ms运行的查询,除非有其他东西妨碍它。

既然你已经打开了nolock,那么表的大小一定是有意义的——这是io&等待页面加载的持续时间是开销(注意,这也可能是从RAM到CPU的缓存争用加载,而不仅仅是磁盘io(

如果你在后台清除缓冲区,可能是在计算编译开销;释放proccache。

我不知道这是否会并行化——如果这种情况发生变化(因为结果必须合并(,可能会产生一些开销

它是在一个单一的线程上,但在cpu核心出现短暂停滞时?其他的东西。

您可能需要找到某种方法来获取每个调用的实际执行统计数据。。。

最新更新