这里的代码非常简单。
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核心出现短暂停滞时?其他的东西。
您可能需要找到某种方法来获取每个调用的实际执行统计数据。。。