Sql 执行时间:为什么相同代码和相同参数的持续时间会有很大差异?
下面是代码-非常简单Sql 执行时间:为什么相同代码和相同参数的持续时间会有很大差异?,sql,sql-server,Sql,Sql Server,下面是代码-非常简单 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之前,我使用以下命令清理了计划缓存和缓冲区缓存:
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内核运行时会短暂暂停吗?还有别的
您可能必须找到某种方法来获取每个调用的实际执行统计数据…表TOrder_Bak10中没有WHERE子句。这使得你的处境看起来很奇怪或是理论性的。或者最终你会在你的查询中有一千万行,并且想知道为什么它很慢。通常,您提出的问题是为什么存在选项(重新编译)的概念。如果您在生产系统上,请避免使用诸如FREEPROCCACHE之类的DBCC命令,除非您是负责数据库的人,并且您有信心知道DBCC命令的副作用会对您的系统造成什么影响。真的,谢谢回复。这只是一个在我的测试环境中运行的示例,我放弃了。哈。哈哈,老实说,这不关我的事。我们有DBA。但我发现了一些有趣的事情。就像所有在内存、缓存或缓冲区中创建的数据一样。这甚至发生在我创建了一个新的临时表之后。同时分析了在线数据库和本地数据库的相同查询计划。CPU成本在任何工作线程中都非常稳定和快速。所以也许是记忆压力的问题。因为就像我说的。内存中的所有数据。每秒钟都会发生许多昂贵的查询。无论如何谢谢你的帖子。我很感激。