Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 执行时间:为什么相同代码和相同参数的持续时间会有很大差异?_Sql_Sql Server - Fatal编程技术网

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成本在任何工作线程中都非常稳定和快速。所以也许是记忆压力的问题。因为就像我说的。内存中的所有数据。每秒钟都会发生许多昂贵的查询。无论如何谢谢你的帖子。我很感激。